如何用mutate across结合paste0批量更新多列并合并A1:B5?
解决方案
可以用dplyr的mutate(across())配合tidyr的unite()来实现,步骤如下:
- 先加载所需包:
library(tidyverse)
- 替换非NA值为列名首字母,并合并列:
df_processed <- df %>% # 针对A1到B5的列,替换非NA值为列名首字母 mutate(across(A1:B5, ~ifelse(!is.na(.), str_sub(cur_column(), 1, 1), .))) %>% # 合并A1到B5列,生成新列combined,忽略NA值 unite(col = combined, A1:B5, sep = "", na.rm = TRUE)
代码解释
across(A1:B5, ...):指定对A1到B5的所有列进行批量操作ifelse(!is.na(.), str_sub(cur_column(), 1, 1), .):判断当前单元格非NA时,用cur_column()获取当前列名,再通过str_sub()截取首字母替换原数值;NA则保持不变unite(...):将处理后的A1到B5列合并为一个新列,sep = ""表示合并时无分隔符,na.rm = TRUE会自动剔除合并过程中的NA值
处理后的结果示例:
> df_processed # A tibble: 3 × 2 ID combined <chr> <chr> 1 Tom AD 2 Jerry A 3 Kate AB
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

