R 编码,我试图将数据帧中的变量从 1 到 13 正确排序,但它就像 201501、2015010、011,012,013、02...09

标签 r dataframe variables plot

我有一个按会计年度和会计期间排序的大型数据框。我正在尝试创建一个从 2015 年第 1 财期开始,到 2019 年第 13 财期结束的时间图。我有两列,一列用于 FY,一列用于 FP。它们看起来像这样。

enter image description here

我使用以下代码将两列合并在一起,并在新列 (C) 中以 0 分隔:

MarkP$C = paste(MarkP$FY, MarkP$FP, sep="0")

这确保我的新列是一个数值变量。

看起来像这样(检查 C 列)

enter image description here

然后,由于我想绘制每个期间总销售额的时间图,因此我将所有销售额聚合到 C 级别,因此以相同 C 结尾的所有行聚合在一起。我使用此代码进行聚合。

MarkP11 <- MarkP %>% 
  group_by(C) %>% 
  summarise(Sales=sum(Sales))

这就是 MarkP11 的样子。

enter image description here

我遇到的问题是行的顺序乱了,所以当我绘制它们时,它给了我一个不正确的图。第 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/

相关文章:

variables - 替换变量中的 "%"

r - 如何矢量化: set a value based on last time a binary vector was 1

r - 在R markdown pdf文档的右上角插入一个logo

r - ggplot2条形图中的订单条

r - 添加脚注/感谢 Rmarkdown 标题幻灯片

python - 如何在列表的间隔之间填充元素

python - 如何使用 Pandas 获取每个组中的上一个和中间日期

bash - 如何修改 bash 函数中的全局变量?

mysql - 无法在 mysql Select 中使用变量

r - 根据列中连续值形成的模式从数据框中选择行