我有以下R数据帧
df1=data.frame(x = c(1,1,2,2,2,3), y = c("f","g","g","h","i","f"), z=c(6,7,5,2,1,5))
x y z
1 1 f 6
2 1 g 7
3 2 g 5
4 2 h 2
5 2 i 1
6 3 f 5
我需要获得
df2=data.frame(x = c(1,2,3), f=c(6,0,5), g=c(7,5,0), h=c(0,2,0),i=c(0,1,0))
x f g h i
1 1 6 7 0 0
2 2 0 5 2 1
3 3 5 0 0 0
我尝试使用reshape2中的dcast
df3=dcast(df1,x~y,length)
产生
x f g h i
1 1 1 1 0 0
2 2 0 1 1 1
3 3 1 0 0 0
这不是我需要的。
感谢您的帮助!
更新
我意识到这个问题已经被问到,可以找到一个完整的答案here。
顺便说一句,Akrun的答案正是我需要的清晰格式。
答案 0 :(得分:1)
如果' z'中的值,我们不需要指定fun.aggregate
。需要为每个' x'的组合填充列。并且' y' (假设' x'' y'
dcast(df1, x~y, value.var='z', fill=0)
# x f g h i
#1 1 6 7 0 0
#2 2 0 5 2 1
#3 3 5 0 0 0
或使用spread
library(tidyr)
spread(df1, y, z, fill=0)