如何使用dcast(高级)重塑R中的数据帧?

时间:2016-02-20 16:10:19

标签: r

我有以下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的答案正是我需要的清晰格式。

1 个答案:

答案 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)