我想获取当前在行中的一些数据,并将其转换为列。这里的想法是为x1
中df
的每个值设置一行,并根据唯一x3
将x1
中的数据拆分为两列和x2
组合。
> df
x1 x2 x3
1 A 0 4
2 A 1 2
3 B 1 1
4 C 0 5
5 C 1 2
6 D 0 1
7 D 1 1
8 E 0 3
这可能涉及多步清理过程,但最终我想获得类似下表df_rev
的内容。请注意,B0
和E1
的缺失组合已替换为0值。
> df_rev
x1 x3_0 x3_1
1 A 4 2
3 B 0 1
4 C 5 2
6 D 1 1
8 E 3 0
现在我一直试图让this answer符合我的情况,但没有太多运气。任何帮助将不胜感激。
答案 0 :(得分:3)
df='
No x1 x2 x3
1 A 0 4
2 A 1 2
3 B 1 1
4 C 0 5
5 C 1 2
6 D 0 1
7 D 1 1
8 E 0 3'
df=read.table(text=df,header=T)
library(reshape)
nf = cast(df, x1 ~ x2, value = .(x3))
colnames(nf) = c('x1','x3_0','x3_1')
nf[is.na(nf)] <- 0
nf
答案 1 :(得分:0)
您还可以使用内置的“重塑”功能。 sub
表达式只是用.
替换变量名中_
的所有实例,如果你有很多“次”,这可能比重新输入所有新变量名更方便(在这里你只是有两个,但你可以轻松拥有更多):
df_rev = reshape(df, timevar="x2", idvar="x1", direction="wide")
names(df_rev) = sub("\\.", "_", names(df_rev))
df_rev[is.na(df_rev)] = 0
df_rev