用宏转置数据

时间:2017-07-04 14:52:00

标签: r data-manipulation

我想使用循环而不是典型的转置函数来转置我的数据,所以我不必将数据与未使用的变量合并。

我的数据如下:

df1 <- data.frame(ID=c(1:4), Amount=c(100, 150, 75, 50), 
    Month=c("Jan", "Feb", "Mar", "Apr"))

其中给出了以下结果:

ID Amount Month
1    100   Jan
2    150   Feb
3     75   Mar
4     50   Apr

我希望最终结果如下:

ID Amount Jan Feb Mar Apr
1    100   1   0   0   0
2    150   0   1   0   0
3     75   0   0   1   0
4     50   0   0   0   1

我知道如何在SAS中执行此操作但无法找到R的解决方案。我们的帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

library('tidyr')
df1 <- data.frame(ID=c(1:4), Amount=c(100, 150, 75, 50), 
                  Month=c("Jan", "Feb", "Mar", "Apr"))
df1$ID <- 1
df1 <- spread(df1 , Month, ID, fill=0)
df1

将导致:

  Amount Apr Feb Jan Mar
1     50   1   0   0   0
2     75   0   0   0   1
3    100   0   0   1   0
4    150   0   1   0   0

答案 1 :(得分:1)

以下是base R选项table

cbind(df1, as.data.frame.matrix(table(lapply(df1[-1], 
                         function(x) factor(x, levels = unique(x))))))