我想使用循环而不是典型的转置函数来转置我的数据,所以我不必将数据与未使用的变量合并。
我的数据如下:
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的解决方案。我们的帮助表示赞赏。
答案 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))))))