Bio*_*eek 1 transpose r dplyr tidyr
我有一个数据集
df <- data.frame(sp = rep(c("A","B","C","D"), each = 10), val = rnorm(40,6,0.1))
sp val
A 6
A 6.1
A 5.9
...
D 6.2
Run Code Online (Sandbox Code Playgroud)
我想“转置”行,使最终的数据框看起来像
sp 1 2 3 4 .....10
A 6 6.1 ...
B
C
D
Run Code Online (Sandbox Code Playgroud)
我无法使用传播,因为它不是唯一的列。转置和枢轴宽也不起作用。
我们可以这样做:
library(tidyr)
library(dplyr)
df %>%
group_by(sp) %>%
mutate(row_id = row_number()) %>%
pivot_wider(names_from = row_id, values_from = val)
Run Code Online (Sandbox Code Playgroud)
sp `1` `2` `3` `4` `5` `6` `7` `8` `9` `10`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A 6.10 6.05 6.02 5.94 6.14 5.94 6.22 6.15 5.98 5.90
2 B 5.93 6.03 5.98 5.97 5.90 6.00 5.92 5.83 5.96 6.09
3 C 5.94 6.06 5.84 5.99 6.05 6.03 6.01 5.94 5.92 5.90
4 D 6.01 5.91 5.95 5.97 6.18 5.93 6.02 6.01 5.90 5.99
Run Code Online (Sandbox Code Playgroud)