我正在尝试将垂直格式的数据框转换为水平格式。我熟悉 dcast
函数。但是,我想使用基于将成为一行的字段的条件来更新 dcast
等式的左侧。这是一个具体的例子:
df = data.frame(ID=c(3,3,3,3,3,3,3,3,4,4,4,4),
Field=rep(c("Color","Height","Weight","Condition"),3),
Values=c("blue",72,140,"ON","blue",72,180,"OFF","green",80,162,"OFF"))
您会注意到,如果我们仅根据ID
进行聚合,则会出现多个匹配项,因为当 Field 为“Condition
”(即, ID
3
Condition
有一个ON
和OFF
条件。因此,我想首先将其作为列拉出,然后应用 dcast
,以生成如下数据帧:
desiredDF = data.frame(ID=c(3,3,4),
Condition=c("ON","OFF","OFF"),
Color=c("blue","blue","green"),
Height=c(72,72,80),
Weight=c(140,180,162))
有什么想法吗?
最佳答案
这是使用 unstack()
+ cbind()
的基础 R 解决方案
dfout <- cbind(t(unique(t(unstack(df, ID ~ Field)))), unstack(df, Values ~ Field))
这样
> dfout
Color Color Condition Height Weight
1 3 blue ON 72 140
2 3 blue OFF 72 180
3 4 green OFF 80 162
关于R:使用条件将垂直数据转换为水平格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59789942/