我有一个数据框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
中的df1
是s
中df
列中的唯一值,并根据它们在df中t
列中的出现进行分组。
每个“ t”中都不会出现重复的“ s”,因此可以假设每个“ t”值中每个“ s”仅出现一次。
是否有一种简便的方法(使用dplyr
或类似方法来操纵df
中的数据以获得df1
?
答案 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创建