r - tidyr - 展开多列

标签 r dplyr spread

我正在为网络元分析准备数据,但在输入列时遇到困难。

如果我有这个初始数据集:

Study Trt       y    sd   n
1       1   -1.22  3.70  54
1       3   -1.53  4.28  95
2       1   -0.30  4.40  76 
2       2   -2.60  4.30  71
2       4    -1.2   4.3  81

我怎样才能完成另一个?
Study Treatment1    y1  sd1  n1 Treatment2    y2  sd2  n2 Treatment3   y3 sd3 n3
    1     1          1 -1.22 3.70  54          3 -1.53 4.28  95         NA   NA  NA NA
    2     3          1 -0.30 4.40  76          2 -2.60 4.30  71          4 -1.2 4.3 81

我真的被困在这一步,我真的很感激一些帮助......

最佳答案

我们可以gather到“长”格式,然后 unite多列到单个和 spreadwide

library(tidyverse)
gather(df1, Var, Val,  Trt:n) %>%
      group_by(Study, Var) %>% 
      mutate(n = row_number()) %>%
      unite(VarT, Var, n, sep="") %>%
      spread(VarT, Val, fill=0)

关于r - tidyr - 展开多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43695424/

相关文章:

r - 从密度函数计算概率

r - 将管道运算符 %>% 与 colnames()<- 等替换函数一起使用

javascript - MyObject.prototype.reduce 回调无法访问数组方法

r - 在 R dplyr 中按计数展开列

r - 将非唯一值放入新列的 spread()

R:根据权重更改某些(但不是全部)绘制数据点的大小

r - "Stretching"R 中的表

r - 将省略号参数传递给映射函数 purrr 包,R

R:将宽格式转换为具有多个 3 个时间段变量的长格式

r - 基于列汇总变量的更快方法