用宏转置数据

transposing data with macro

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

我的数据如下:

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 的解决方案。感谢您的帮助。

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

这是一个 base R 选项 table

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