在 R 数据框中转置具有非唯一标识符的列

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)

我无法使用传播,因为它不是唯一的列。转置和枢轴宽也不起作用。

Tar*_*Jae 5

我们可以这样做:

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)