将两列与第二列垂直组合,第二列的名称来自 R 中第一列的名称

Combine two columns vertically with a second column that has the names from the first column in R

例如,如果我有这个数据框:

column1 column2
v1      v4
v2      v5
v3      v6

如何制作一个新的数据框,使其看起来像这样:

column3 column4
v1      column1
v2      column1
v3      column1
v4      column2
v5      column2
v6      column2

感谢任何帮助!非常感谢!

您可以使用 tidyr 包中的 pivot_longer()

table <- data.frame(
  column1 = paste0("v", 1:3),
  column2 = paste0("v", 4:6)
)

pivot <- tidyr::pivot_longer(
  table,
  cols = everything(),
  names_to = "column4",
  values_to = "column3"
)
pivot
#> # A tibble: 6 x 2
#>   column4 column3
#>   <chr>   <chr>  
#> 1 column1 v1     
#> 2 column2 v4     
#> 3 column1 v2     
#> 4 column2 v5     
#> 5 column1 v3     
#> 6 column2 v6

如果 rows/columns 的顺序很重要,您可以使用 dplyr:

library(dplyr)

pivot %>% 
  relocate(column3) %>% 
  arrange(column3)
#> # A tibble: 6 x 2
#>   column3 column4
#>   <chr>   <chr>  
#> 1 v1      column1
#> 2 v2      column1
#> 3 v3      column1
#> 4 v4      column2
#> 5 v5      column2
#> 6 v6      column2

您可以 stack 列在一起:

stack(df)

  values     ind
1     v1 column1
2     v2 column1
3     v3 column1
4     v4 column2
5     v5 column2
6     v6 column2