用宏转置数据
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))))))
我想使用循环而不是典型的转置函数转置我的数据,这样我就不必将数据与未使用的变量合并。
我的数据如下:
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))))))