我正在寻找一种方法将N行分散到R列中。示例输入 - >输出
给出一个表格,我想将那些年份的行分散到列
中id | year | val_1 | val_2 | val_3
---|------|-------|-------|------
1 | 2001 | 10 | 11 | 12
2 | 2001 | 21 | 22 | 22
3 | 2002 | 31 | 32 | 32
3 | 2002 | 41 | 42 | 42
如下所示:
id | year | val_1_1 | val_2_1 | val_3_1 | val_1_2 | val_2_2 | val_3_2
---|------|---------|---------|---------|---------|---------|--------
1 | 2001 | 10 | 11 | 12 | 20 | 21 | 22
2 | 2002 | 30 | 31 | 32 | 40 | 41 | 42
答案 0 :(得分:1)
如果使用tidyverse,您需要先重新整形为长形式,这样您才能先创建新的列名,然后重塑为更宽的形式:
library(tidyverse)
df <- data_frame(id = c(1L, 2L, 3L, 3L),
year = c(2001L, 2001L, 2002L, 2002L),
val_1 = c(10L, 21L, 31L, 41L),
val_2 = c(11L, 22L, 32L, 42L),
val_3 = c(12L, 22L, 32L, 42L))
df %>%
gather(val_n, val, contains('val')) %>% # gather to long form
group_by(year, val_n) %>%
mutate(val_n_n = paste(val_n, row_number(), sep = '_')) %>% # make new column names
ungroup() %>% select(-id, -val_n) %>% # clean up
spread(val_n_n, val) # spread back to wide form
#> # A tibble: 2 x 7
#> year val_1_1 val_1_2 val_2_1 val_2_2 val_3_1 val_3_2
#> <int> <int> <int> <int> <int> <int> <int>
#> 1 2001 10 21 11 22 12 22
#> 2 2002 31 41 32 42 32 42