如何按列名整理R语言dataframe 使每列仅保留对应标识的取值
R语言数据框按列匹配前缀过滤取值方案
方案1:tidyverse生态实现
- 依赖包:
dplyr、stringr
library(dplyr) library(stringr) df_clean <- df %>% # 遍历所有列执行匹配规则 mutate(across(everything(), ~ifelse(str_starts(.x, cur_column()), .x, "NA")))
逻辑说明:across(everything())遍历数据框全部列,cur_column()动态获取当前处理的列名,str_starts()判断单元格取值是否以对应列名作为前缀,匹配则保留原值,不匹配则填充为"NA"。
方案2:基础R实现(无需额外安装依赖)
df_clean <- df # 遍历所有列名执行过滤 for (col_name in colnames(df_clean)) { df_clean[[col_name]] <- ifelse(startsWith(df_clean[[col_name]], col_name), df_clean[[col_name]], "NA") }
逻辑说明:用for循环遍历所有列,调用R基础函数startsWith()做前缀匹配,执行和上述方案一致的替换规则。
输出验证
执行上述任意代码后得到的df_clean结果如下:
| P1 | P2 | P3 | P4 | P5 |
|---|---|---|---|---|
| P1 -> (Normal,_) | NA | NA | NA | NA |
| P1 -> (Normal,_) | NA | P3 -> (UP,_) | P4 -> (UP,_) | NA |
| NA | P2 -> (UP,_) | NA | NA | NA |
| NA | NA | NA | NA | NA |
内容的提问来源于stack exchange,提问作者Yulia Kentieva
相关产品推荐
相关产品推荐

