【问题标题】:String concatenation based on values of a column基于列值的字符串连接
【发布时间】:2019-03-26 15:52:01
【问题描述】:

如何根据列“num”的值创建新列“desc”?

这是我的原始数据集。 a、b、c、d、e 和 f 是行名。

这是我正在寻找的输出。请注意,“desc”由“num”列的行名组成。 num 2 的行名是 b 和 d;因此 num 2 的 desc 是“Var : b, d”。 num 3 的行名是 c、e、f;因此 num 3 的 desc 是“Var : c, e, f.”

这是创建数据集的代码。

df <- data.frame(num=c(1, 2, 3, 4, 3, 3))
rownames(df) <- c("a", "b", "c", "d", "e", "f")

【问题讨论】:

    标签: r string concatenation


    【解决方案1】:

    我们从行名(rownames_to_column)创建一列,按“num”分组,通过pasteing 行名列(“rn”)的元素创建“desc”

    library(tidyverse)
    df %>% 
      rownames_to_column('rn') %>% 
      group_by(num) %>% 
      transmute(desc = paste0('var: ', toString(rn)))
    # A tibble: 6 x 2
    # Groups:   num [3]
    #    num desc        
    #  <dbl> <chr>       
    #1     1 var: a      
    #2     2 var: b, d   
    #3     3 var: c, e, f
    #4     2 var: b, d   
    #5     3 var: c, e, f
    #6     3 var: c, e, f
    

    数据

    df <- structure(list(num = c(1, 2, 3, 2, 3, 3)), 
       class = "data.frame", row.names = c("a", 
      "b", "c", "d", "e", "f"))
    

    【讨论】:

      【解决方案2】:
      transform(df, desc = ave(row.names(df), df$num, FUN = function(x) toString(x)))
      #  num    desc
      #a   1       a
      #b   2       b
      #c   3 c, e, f
      #d   4       d
      #e   3 c, e, f
      #f   3 c, e, f
      

      【讨论】:

        猜你喜欢
        • 2018-06-13
        • 1970-01-01
        • 1970-01-01
        • 2016-11-22
        • 2018-12-08
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        • 2013-10-06
        相关资源
        最近更新 更多