【问题标题】:Collapsing columns in r to form one column of delimited strings [duplicate]折叠r中的列以形成一列分隔字符串[重复]
【发布时间】:2020-09-05 16:18:20
【问题描述】:

我有一个如下的数据框:

df <- structure(list(a = c("1", "2", "3"), b = c("Tom", "Jen", "Rob"
), c = c("Wrist", "Ankle", "Neck")), class = "data.frame", row.names = c(NA, 
-3L))

我正在尝试将我的列折叠成一列,其中每一行包含一个文本字符串,该字符串由每一列中的数据组成,由分隔符(特别是 ; [冒号])分隔。

我当前的代码将我的数据转换为文本字符串,但它不是多行,而是包含数据框中所有数据的单个单元格:

data.frame(format_delim(df[1:nrow(df),],";", append = FALSE, col_names = FALSE, quote_escape = FALSE))

我应该怎么做才能获得以下数据框?

structure(list(c..1.Tom.Wrist....2.Jen.Ankle....3.Rob.Neck.. = c("1;Tom;Wrist", 
"2;Jen;Ankle", "3;Rob;Neck")), class = "data.frame", row.names = c(NA, 
-3L))

谢谢。希望这很容易理解。

【问题讨论】:

    标签: r delimiter


    【解决方案1】:

    我们可以使用带有do.call的矢量化选项

    data.frame(col1 = do.call(paste, c(df, sep=";")))
    #     col1
    #1 1;Tom;Wrist
    #2 2;Jen;Ankle
    #3  3;Rob;Neck
    

    或者如果只有几列,我们可以使用

    with(df, paste(a, b, c, sep=";"))
    

    或者另一个选项是unite

    library(tidyr)
    library(dplyr)
    df %>%
        unite(col1, a, b, c, sep = ";")
    #       col1
    #1 1;Tom;Wrist
    #2 2;Jen;Ankle
    #3  3;Rob;Neck
    

    【讨论】:

      【解决方案2】:

      试试这个apply() 解决方案:

      #Code
      out <- data.frame(v1=apply(df,1,function(x) paste0(x,collapse = ';')))
      

      输出:

                 v1
      1 1;Tom;Wrist
      2 2;Jen;Ankle
      3  3;Rob;Neck
      

      如果您想将新变量添加到您原来的 df 中,您可以使用:

      #Code
      df$var <- apply(df,1,function(x) paste0(x,collapse = ';')) 
      

      输出:

        a   b     c         var
      1 1 Tom Wrist 1;Tom;Wrist
      2 2 Jen Ankle 2;Jen;Ankle
      3 3 Rob  Neck  3;Rob;Neck
      

      【讨论】:

        猜你喜欢
        • 2014-06-22
        • 1970-01-01
        • 2016-01-31
        • 1970-01-01
        • 2019-10-11
        • 2021-10-09
        • 2012-03-08
        • 1970-01-01
        • 2021-02-28
        相关资源
        最近更新 更多