R 中用于分类数据的行到列(w 通用编号列)?

Rows to Columns in R for categorical data (w generic numbered cols)?

我需要将长数据转换为宽数据,但需要根据需要创建新的编号列(col1、col2 等)。 (换句话说,col 名称不是从键中获取的,而是一般生成的。)所以从这样的事情开始:

d <- data.frame(row_id = c(1,1,2,2,2,3,3,3),cat = c("a","b","a","d","e","d","f","g"))

  row_id cat
1      1   a
2      1   b
3      2   a
4      2   d
5      2   e
6      3   d
7      3   f
8      3   g

像这样:

row_id,cat1,cat2,cat3
1,a,b,,
2,a,d,e
3,d,f,g

spread() 和 pivot_wider() 不太符合要求,因为我正在处理分类值和大量类别(但每个 ID 不超过 8 个)。在 python 中,我可能会遍历行,将新的 key:value 对 ("cat"+i:"a") 添加到列表(或其他内容)中的字典中,但不确定类似的是什么方法将在 R 中,或者是否有更好的方法。

我们通过 'row_id' 创建一个序列列,然后使用 pivot_wider

转向宽
library(dplyr)
library(tidyr)
library(stringr)
library(data.table)
d %>% 
  mutate(rn = str_c('cat', rowid(row_id))) %>%
  pivot_wider(names_from = rn, values_from = cat)

-输出

# A tibble: 3 x 4
#  row_id cat1  cat2  cat3 
#   <dbl> <chr> <chr> <chr>
#1      1 a     b     <NA> 
#2      2 a     d     e    
#3      3 d     f     g