【问题标题】:Column rows concatenation based on other columns of the dataframe基于数据框的其他列的列行连接
【发布时间】:2021-04-18 20:16:00
【问题描述】:

我想连接由“,”分隔的列行值,查看行值不应为零的列。

步骤示例:

  1. group_by 日期,行值不为零的列名 x,用 ',' 分隔的列名 'colname' 的连接值
  2. group_by 日期,行值不为零的列名 y,用 ',' 分隔的列名 'colname' 的连接值
  3. 在第 1 步和第 2 步中使用这两个连接值,将它们连接起来,用“/”分隔,创建一个新列 colname1
  4. 将 colname1 中的最终连接值扩展到 group_by date 的所有行项

数据框:

输出数据框:

【问题讨论】:

    标签: r dataframe string-concatenation dplyr


    【解决方案1】:

    我们按'date'分组,将'colname'子集,根据'x'和'y'不为0的值,pastetoString),分别然后转换成单个字符串str_c

    library(dplyr)
    library(stringr)
    df1 %>%
      group_by(date) %>%
      mutate(colname1 = str_c(toString(colname[x != 0]), 
                               toString(colname[y != 0]), sep = "/")) %>%
      ungroup
    

    -输出

    # A tibble: 5 x 5
    #  date       colname     x     y colname1              
    #  <chr>      <chr>   <dbl> <dbl> <chr>                 
    #1 01-01-2021 a01       1     2   a01, d01/a01, b01, d01
    #2 01-01-2021 b01       0     4   a01, d01/a01, b01, d01
    #3 01-01-2021 d01       3     4   a01, d01/a01, b01, d01
    #4 02-01-2021 b01       3.1   1.1 b01, c01/b01, c01     
    #5 02-01-2021 c01       4.5   6.2 b01, c01/b01, c01     
    

    数据

    df1 <- structure(list(date = c("01-01-2021", "01-01-2021", "01-01-2021", 
    "02-01-2021", "02-01-2021"), colname = c("a01", "b01", "d01", 
    "b01", "c01"), x = c(1, 0, 3, 3.1, 4.5), y = c(2, 4, 4, 1.1, 
    6.2)), class = "data.frame", row.names = c(NA, -5L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 2019-03-29
      • 2022-01-16
      相关资源
      最近更新 更多