【问题标题】:How can I combine/merge two columns in a dataframe and create a new column that specifies the origin of the data point?如何合并/合并数据框中的两列并创建一个指定数据点来源的新列?
【发布时间】:2021-04-20 09:33:51
【问题描述】:

我有一个这样的数据框

x1 <- c(1,2,3)
x2 <- c(5,6,7)
df <- data.frame(x1,x2)

我想将 x1 和 x2 这两列合并/合并为一列,其中包含所有值。此外,我想创建一个新列,说明我的数据点来自两列中的哪一列。我想要的输出如下所示:

x <- c(1,2,3,4,5,6)
orig <- c("x1","x1","x1","x2","x2","x2")
df_merged <- data.frame(x,orig)

我搜索了很多列的合并、组合、分组,但显然这不是所谓的过程。感谢您提前提供任何帮助。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    您可以在tidyr 中使用pivot_longer 整形函数

    library(tidyr)
    pivot_longer(df, cols = everything())
    
    #  name  value
    #  <chr> <dbl>
    #1 x1        1
    #2 x2        5
    #3 x1        2
    #4 x2        6
    #5 x1        3
    #6 x2        7
    

    melt 中的data.table

    library(data.table)
    melt(setDT(df))
    

    【讨论】:

      【解决方案2】:

      试试stack

      > stack(df)
        values ind
      1      1  x1
      2      2  x1
      3      3  x1
      4      5  x2
      5      6  x2
      6      7  x2
      

      【讨论】:

        【解决方案3】:

        使用base R

        data.frame(name = rep(names(df), each = nrow(df)), value = unlist(df))
        

        或使用gather

        library(tidyr)
        gather(df)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-07-20
          • 1970-01-01
          • 2016-12-25
          • 2019-12-16
          • 1970-01-01
          • 2018-09-17
          • 1970-01-01
          相关资源
          最近更新 更多