我如何在R中使用for循环来处理此数据

时间:2019-06-12 12:36:46

标签: r dplyr

sample data

我对R中的数据操作有疑问。我在这项工作中需要通过链接中的样本数据来操作数据。当我尝试执行此操作时,我尝试使用dplyr软件包,但没有用。所以我想使用for循环。

我想要的就是这个:

我想保持A,B,C,D,E类别固定不变,并在其旁边放置月份的数据。就像1990年1月,1990年2月,....,1990年12月,1991年1月,1991年2月,...,1991年12月。由于某些年份中没有某些类别的数据,因此在与那些类别相对应的月份中,其值应为“ 0”。我应该如何为此编写一个for循环?

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用您的照片的伪造品,我写了以下内容。让我知道输出是否为ac。这类似于rfortin的建议,但使用data.table而不是dplyr

代码:

library(data.table)

dt <- melt(data, id.vars = c("Year", "Category"), measure.vars = c("Jan", "Feb"), 
           variable.name = "Month", value.name = "Profit") %>%
  .[, `Month-Year`:= paste(`Month`, `Year`, sep = " ")] %>%
  dcast(., `Category` ~ `Month-Year`, fun.aggregate = sum, value.var = "Profit")

数据:

data <- data.table(Year = c(1999,1999,1999,2000,2000,2000,2001,2001,2001), 
                   Category = c("A", "B", "C","A", "B", "C","A", "B", "C"), 
                   Jan = c(234234,3413,134,134,13423,1324,1324,1235,54), 
                   Feb = c(234523,435234,0,2342,0,153,24,234,72))

输出:

   Category Feb 1999 Feb 2000 Feb 2001 Jan 1999 Jan 2000 Jan 2001
1:        A   234523     2342       24   234234      134     1324
2:        B   435234        0      234     3413    13423     1235
3:        C        0      153       72      134     1324       54