R:使用条件将垂直数据转换为水平格式

标签 r dataframe reshape tidyr

我正在尝试将垂直格式的数据框转换为水平格式。我熟悉 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"))

enter image description here

您会注意到,如果我们仅根据ID 进行聚合,则会出现多个匹配项,因为当 Field 为“Condition”(即, ID 3 Condition 有一个ONOFF 条件。因此,我想首先将其作为列拉出,然后应用 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))

enter image description here

有什么想法吗?

最佳答案

这是使用 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/

相关文章:

performance - 在 matlab 中使用列零填充将向量 reshape 为矩阵

R ggplot2 具有 reshape (融化功能)选择性地绘制数据集

r - 在多个页面上使用 grid.arrange 或带有 layout_matrix 的 marrangeGrob

r - 在 R 中建立家庭嵌套树父/子关系

python - 将组内的行合并在一起

python - 在多索引数据框中添加缺失日期索引

python - 正则表达式搜索 Pandas 数据框中的整列

python - 将数据框 reshape 为具有无限行并在没有值的情况下填充零的数据框

r - 如何在R中自动处理矩阵(数据框)

r - 向 ggplotly 图中添加垂直线