R 从长到宽的数据框只有 2 列

R long to wide data frame with only 2 columns

我正试图在 R 中解决这个非常微不足道的问题,但我不太明白。我有一个只有两列的数据框。

> dput(rrr)
structure(list(row = c(1, 2, 3, 4, 1, 2, 4, 6, 1, 3, 4, 5, 1, 
4, 2, 3, 6, 7, 5, 3, 5, 4, 7, 8, 2, 6, 4, 7, 10, 4, 7, 5, 6, 
10, 9, 8, 5, 8, 7, 9, 7, 9, 8, 10, 6, 10, 7, 9), col = c("1", 
"1", "1", "1", "2", "2", "2", "2", "3", "3", "3", "3", "4", "4", 
"4", "4", "4", "4", "4", "5", "5", "5", "5", "5", "6", "6", "6", 
"6", "6", "7", "7", "7", "7", "7", "7", "7", "8", "8", "8", "8", 
"9", "9", "9", "9", "10", "10", "10", "10")), row.names = c(1L, 
2L, 4L, 6L, 16L, 17L, 19L, 21L, 31L, 32L, 34L, 36L, 46L, 47L, 
48L, 50L, 53L, 55L, 57L, 58L, 59L, 60L, 63L, 65L, 70L, 71L, 72L, 
75L, 77L, 82L, 83L, 84L, 86L, 89L, 91L, 93L, 94L, 95L, 96L, 99L, 
109L, 110L, 111L, 115L, 125L, 126L, 127L, 129L), class = "data.frame")

我想理想地从这个开始:

对此:

与行中每个值相匹配的列中的数字被写在新列中的旁边。理想情况下,当数字与您在下面的示例中看到的相同时,我不想在新列中写入数字。 我曾尝试使用重塑,但我迷路了,因为我只有 2 列,而我看到的大多数示例都有 3 列。 我希望有一个人可以帮助我。 谢谢!

我们创建一个序列列并进行数据透视

library(dplyr)
library(tidyr)
library(data.table)
rrr %>% 
    mutate(rn = rowid(row)) %>%
    pivot_wider(names_from = rn, values_from = col)
# A tibble: 10 x 8
#     row `1`   `2`   `3`   `4`   `5`   `6`   `7`  
#   <dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# 1     1 1     2     3     4     <NA>  <NA>  <NA> 
# 2     2 1     2     4     6     <NA>  <NA>  <NA> 
# 3     3 1     3     4     5     <NA>  <NA>  <NA> 
# 4     4 1     2     3     4     5     6     7    
# ...

data.table

dcast(setDT(rrr), row ~ rowid(row), value.var = 'col')