Поворот таблицы без пар ключ-значение - PullRequest
1 голос
/ 16 апреля 2020

У меня есть фрейм данных в виде

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_name  column1   column2  column3  column4    column5                                 
1 "city"      "Vienna"  "Paris"  "London" ""         ""      
2 "car"       "Honda"   "Nissan" ""       ""         ""      
3 "country"   "Germany" "Spain"  "Italy"  "Portugal" "France"

Есть ли элегантный способ сделать это с reshape2 или тидыр? Я не против, если есть пустые строки или значения NULL. Именование нового столбца должно быть просто добавлением следующего целого числа или чего-то еще.

Это не в форме пар ключ-значение, поэтому я немного борюсь.

1 Ответ

2 голосов
/ 16 апреля 2020

Мы можем создать столбец последовательности и использовать 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 

Или использовать dcast из data.table

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
...