You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在tidyverse的mutate中用字符串向量结合paste生成ID

解决方案

你遇到的问题是直接用paste(mygroup, collapse = "_")只会拼接列名字符串,而不是对应行的列值。下面是几种可行的解决办法:

方法1:使用unite(最简洁的tidyverse方式)

unite函数专门用来合并列,配合all_of()可以直接引用字符串向量中的列名:

df %>% 
  unite(ID, all_of(mygroup), sep = "_", remove = FALSE)
  • remove = FALSE保留原列,默认是TRUE会删掉用来合并的列,可根据需求调整。

方法2:使用rowwise + c_across

先按行分组,再提取指定列的行值进行拼接:

df %>% 
  rowwise() %>% 
  mutate(ID = paste(c_across(all_of(mygroup)), collapse = "_")) %>% 
  ungroup()
  • rowwise()让后续操作按行执行,c_across()提取每行中mygroup指定列的值组成向量,再用paste完成拼接。

方法3:使用rlang符号转换(适合理解tidyeval逻辑)

把字符串向量转成列名符号,再用!!!展开到paste中:

df %>% 
  mutate(ID = paste(!!!syms(mygroup), sep = "_"))
  • syms(mygroup)把字符串转成列名符号,!!!将符号向量展开成单独参数传给paste,从而取到每行的列值。

验证结果

以上三种方法都能得到你期望的输出:

# A tibble: 2 x 4
  PERIOD CODE  VALUE ID    
   <dbl> <chr> <dbl> <chr> 
1   1995 A        10 1995_A
2   1996 B        20 1996_B

内容的提问来源于stack exchange,提问作者arnyeinstein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 17:34:53