R语言基于条件合并5个指定result列生成新列的问题求解
R DataFrame多列合并问题解决方案
原有代码核心问题
coalesce()函数仅能返回每行第一个非缺失值,无法实现多值拼接的需求,不符合你的业务场景- 管道操作中直接调用
df$xxx会读取原始未经过处理的df数据,而非管道中已完成转换的临时数据;且你最后选择的df$resultsnew是不存在的列,会直接报错
修正后可用代码
方案1:rowwise逐行处理(逻辑更直观)
library(tidyverse) df_new <- df %>% # 将所有result开头列的"0"替换为NA mutate(across(starts_with("result___"), ~na_if(.x, "0"))) %>% # 逐行拼接非NA的result值,用英文逗号+空格分隔 rowwise() %>% mutate(resultsnew = str_c(c_across(starts_with("result___")), collapse = ", ", na.rm = TRUE)) %>% # 解除行分组,保留需要的列 ungroup() %>% select(ID, resultsnew)
方案2:tidyr::unite快速拼接(写法更简洁)
library(tidyverse) df_new <- df %>% mutate(across(starts_with("result___"), ~na_if(.x, "0"))) %>% # 直接合并所有result列,自动忽略NA值 unite("resultsnew", starts_with("result___"), sep = ", ", na.rm = TRUE, remove = FALSE) %>% select(ID, resultsnew)
两种方案运行后得到的resultsnew列完全符合需求,单值仅保留对应文本、多值用逗号分隔,自定义文本也会正常保留参与拼接。
内容的提问来源于stack exchange,提问作者Meli
相关产品推荐
相关产品推荐

