如何在dplyr的mutate中实现列名与对应行值的拼接?
问题:用dplyr批量修改单元格内容为「列名_行值」
现有数据框:
df <- data.frame(player_id= c(1, 3), goals= c(22,44))
需求:使用dplyr包实现通用方案,修改所有列,使每个单元格内容为「列名_对应行值」,适配任意列数。期望结果如下:
| player_id | goals |
|---|---|
| player_id_1 | goals_22 |
| player_id_3 | goals_44 |
初始尝试代码:
df %>% mutate(across(everything(), ~ paste0({.col}, '_', {.row})))
请问应将代码中的.col和.row替换为什么,以实现需求?
解决方案
将.col替换为cur_column(),.row替换为.,修正后的完整代码如下:
df %>% mutate(across(everything(), ~ paste0(cur_column(), '_', .)))
关键细节说明
cur_column():在across()的匿名函数环境中,该函数能直接获取当前正在处理的列名,对应需求里的「列名」部分。.:在across()的匿名函数中,这个符号代表当前列的每一行具体值,对应需求里的「对应行值」部分。
运行修正后的代码,会得到符合预期的结果:
# 输出结果 player_id goals 1 player_id_1 goals_22 2 player_id_3 goals_44
内容的提问来源于stack exchange,提问作者GitZine
相关产品推荐
相关产品推荐

