如何根据特定列中唯一数据点上出现的值来汇总数据帧?

时间:2019-02-11 19:55:35

标签: r tidyverse

我有一个数据框df,由:

r  t s      v
1  1 a   4.50
2  1 b   3.00
3  2 c   3.22
4  3 d   2.00
5  3 a   5.00
6  1 c   1.00
7  1 f  14.00
8  2 b 144.00
9  3 c   2.00
10 4 a  22.00
11 2 a   2.20
12 3 e 232.00
13 4 g  45.00
14 3 g   4.30
15 3 b   3.20
16 4 b   2.00
17 4 c   2.60

我想将其转换为另一个数据帧df1

r t    a     b    c  d   e    f  g
1 1  4.5   3.0 1.00 NA  NA 14.0 NA
2 2  2.2 144.0 3.22 NA  NA   NA NA
3 3  5.0   3.2 2.00  2 232 NA 4.3
4 4 22.0   2.0 2.60 NA  NA NA 45.0

其中colnames中的df1sdf列中的唯一值,并根据它们在df中t列中的出现进行分组。

每个“ t”中都不会出现重复的“ s”,因此可以假设每个“ t”值中每个“ s”仅出现一次。

是否有一种简便的方法(使用dplyr或类似方法来操纵df中的数据以获得df1

1 个答案:

答案 0 :(得分:0)

我推断您在使用重复目标的答案时可能会遇到问题,因为您已将行号作为一列。我们可以在没有spread列的表上r。注意,在输出的第3行和第4行中有两个值在示例输出中似乎被错误分类;它们应位于g下,而不是f下。

library(tidyverse)
tbl <- read_table2(
"t s      v
1 a   4.50
1 b   3.00
2 c   3.22
3 d   2.00
3 a   5.00
1 c   1.00
1 f  14.00
2 b 144.00
3 c   2.00
4 a  22.00
2 a   2.20
3 e 232.00
4 g  45.00
3 g   4.30
3 b   3.20
4 b   2.00
4 c   2.60"
)
tbl %>%
  spread(s, v)
#> # A tibble: 4 x 8
#>       t     a     b     c     d     e     f     g
#>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1     1   4.5   3    1       NA    NA    14  NA  
#> 2     2   2.2 144    3.22    NA    NA    NA  NA  
#> 3     3   5     3.2  2        2   232    NA   4.3
#> 4     4  22     2    2.6     NA    NA    NA  45

reprex package(v0.2.1)于2019-02-11创建