我有一个按会计年度和会计期间排序的大型数据框。我正在尝试创建一个从 2015 年第 1 财期开始,到 2019 年第 13 财期结束的时间图。我有两列,一列用于 FY,一列用于 FP。它们看起来像这样。
我使用以下代码将两列合并在一起,并在新列 (C) 中以 0 分隔:
MarkP$C = paste(MarkP$FY, MarkP$FP, sep="0")
这确保我的新列是一个数值变量。
看起来像这样(检查 C 列)
然后,由于我想绘制每个期间总销售额的时间图,因此我将所有销售额聚合到 C 级别,因此以相同 C 结尾的所有行聚合在一起。我使用此代码进行聚合。
MarkP11 <- MarkP %>%
group_by(C) %>%
summarise(Sales=sum(Sales))
这就是 MarkP11 的样子。
我遇到的问题是行的顺序乱了,所以当我绘制它们时,它给了我一个不正确的图。第 1 节之后有第 10 节。
我做了一些研究,发现 sprintf 函数可能有效,但我不确定如何将其合并到我的数据框的代码中。
下面的代码是如何通过合并两列来创建我的 C 列。我相信我需要使用“sprintf”函数编辑这一行,但我不确定如何让它工作。
R 编程
MarkP$C = paste(MarkP$FY, MarkP$FP, sep="0")
我希望 MarkP 数据帧的顺序如下所示:
最佳答案
sprintf
确实是您想要的:
sprintf("%0.0f%02.0f", 2019, c(1,10))
# [1] "201901" "201910"
这里假设FP
的范围是0-99。使用 sprintf("%d%02d", 2019, c(1,10)) 不会不正确,因为您打算使用整数,但有时我发现看似整数的值可以触发错误...无效格式'%02d'
,所以我只是强行阻止它。您还可以在每组值上使用 as.integer
...另一种解决方法。
关于R 编码,我试图将数据帧中的变量从 1 到 13 正确排序,但它就像 201501、2015010、011,012,013、02...09,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57713608/