在没有键值对的情况下旋转 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
我有一个形式为
的数据框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