微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于数据框其他列的列行连接 数据

如何解决基于数据框其他列的列行连接 数据

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

步骤示例:

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

数据框:

enter image description here

输出数据帧:

enter image description here

解决方法

我们根据 'date' 分组,根据 'x' 和 'y' 不为 0、paste (toString) 的值,分别对 'colname' 进行子集化,然后进行转换用 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
#3 01-01-2021 d01       3     4   a01,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     

数据

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。