在没有键值对的情况下旋转 table

Pivoting a table without key-value pairs

我有一个形式为

的数据框
table_name <- c("city", "city", "city", "car", "car", "country", "country", "country", "country", "country")
column <- c("Vienna", "Paris", "London", "Honda", "Nissan", "Germany", "Spain", "Italy", "Portugal", "France")

df <- data.frame(table_name, column)

   table_name   column
1        city   Vienna
2        city    Paris
3        city   London
4         car    Honda
5         car   Nissan
6     country  Germany
7     country    Spain
8     country    Italy
9     country Portugal
10    country   France

我想扩大这个 table 并以这种格式获取它:

  table_name  column1   column2  column3  column4    column5                                 
1 "city"      "Vienna"  "Paris"  "London" ""         ""      
2 "car"       "Honda"   "Nissan" ""       ""         ""      
3 "country"   "Germany" "Spain"  "Italy"  "Portugal" "France"

有没有一种优雅的方法可以使用 reshape2 或 tidyr 来做到这一点?我不介意是否有空字符串或 NULL 值。新列的命名应该是简单地添加下一个整数或其他内容。

不是键值对的形式,所以有点纠结。

我们可以创建一个序列列并使用pivot_wider

library(dplyr)
library(tidyr)
library(stringr)
library(data.table)
df %>%
   mutate(col1 = str_c('column', rowid(table_name))) %>% 
   pivot_wider(names_from = col1, values_from = column)
# A tibble: 3 x 6
#  table_name column1 column2 column3 column4  column5
#  <fct>      <fct>   <fct>   <fct>   <fct>    <fct>  
#1 city       Vienna  Paris   London  <NA>     <NA>   
#2 car        Honda   Nissan  <NA>    <NA>     <NA>   
#3 country    Germany Spain   Italy   Portugal France 

或使用 data.table

中的 dcast
library(data.table)
dcast(setDT(df), table_name ~ paste0('column',
       rowid(table_name)), value.var = 'column')
#  table_name column1 column2 column3  column4 column5
#1:        car   Honda  Nissan    <NA>     <NA>    <NA>
#2:       city  Vienna   Paris  London     <NA>    <NA>
#3:    country Germany   Spain   Italy Portugal  France