如何按ID分组并按另一列扩展数据框

时间:2019-04-25 14:31:38

标签: r dplyr tidyr

我想扩展我的数据集,以便每个ID都有一行,并且“ step”列中的每个值都有自己的一行。

我尝试了group_by并在dplyr中传播,但未达到我想要的结果。

我的数据集如下

df = data.frame(id = c(1,1,2,2,3,3,3,4,4,4,4,4), 
       points = c(0,1,0,1,0,1,2,0,1,2,3,4), 
       step = c(0, 0, 0, 0, 0.0000, -1.9701, -1.6758, 0.0000, -2.5414,-2.5397,1.1516,  3.9296))

   id points    step
1   1      0  0.0000
2   1      1  0.0000
3   2      0  0.0000
4   2      1  0.0000
5   3      0  0.0000
6   3      1 -1.9701
7   3      2 -1.6758
8   4      0  0.0000
9   4      1 -2.5414
10  4      2 -2.5397
11  4      3  1.1516
12  4      4  3.9296

我希望最终结果看起来像这样,原始数据集中的“点”列指示最终数据集中的列名称:

 id step0   step1   step2  step3  step4
1  1     0  0.0000      NA     NA     NA
2  2     0  0.0000      NA     NA     NA
3  3     0 -1.9701 -1.6758     NA     NA
4  4     0 -2.5414 -2.5397 1.1516 3.9296

1 个答案:

答案 0 :(得分:0)

我们可以使用spread

library(tidyverse)
df %>% 
    mutate(points = str_c("step", points)) %>%
    spread(points, step)
#  id step0   step1   step2  step3  step4
#1  1     0  0.0000      NA     NA     NA
#2  2     0  0.0000      NA     NA     NA
#3  3     0 -1.9701 -1.6758     NA     NA
#4  4     0 -2.5414 -2.5397 1.1516 3.9296