【问题标题】:Combine two columns vertically with a second column that has the names from the first column in R将两列与第二列垂直组合,第二列的名称来自 R 中的第一列
【发布时间】:2021-05-06 06:51:07
【问题描述】:

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

column1 column2
v1      v4
v2      v5
v3      v6

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

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

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

【问题讨论】:

    标签: r columnsorting


    【解决方案1】:

    您可以将这些列一起stack

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

    【讨论】:

      【解决方案2】:

      您可以使用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
      

      如果行/列的顺序很重要,您可以使用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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-19
        • 2021-05-19
        • 2022-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多