R语言:将数据框中Flag开头列全为NA的行的match列设为NA
修改数据框
match列的规则实现 需求
对目标数据框的match列做如下修改:
- 若某一行中所有以"Flag"开头的列的值均为
NA,则将该行的match值设为NA - 其他情况保留
match列的原始值
示例数据框
# 示例数据 ID Flag_A Flag_B Flag_C Flag_D Flag_E match <NA> <NA> <NA> <NA> <NA> <NA> 0 M Z A <NA> I A 1 F M <NA> R Q B 1 T <NA> <NA> <NA> <NA> <NA> 0 P N V L J D 0 L O U <NA> <NA> <NA> 1
期望输出
# 修改后的数据 ID Flag_A Flag_B Flag_C Flag_D Flag_E match <NA> <NA> <NA> <NA> <NA> <NA> NA M Z A <NA> I A 1 F M <NA> R Q B 1 T <NA> <NA> <NA> <NA> <NA> NA P N V L J D 0 L O U <NA> <NA> <NA> 1
实现方案
方案1:使用dplyr包(tidyverse风格)
借助if_all函数批量判断Flag开头的列,再用if_else修改match列:
library(dplyr) # 假设数据框名为df df <- df %>% mutate(match = if_else(if_all(starts_with("Flag"), is.na), NA_integer_, match))
方案2:使用基础R(无需额外包)
先定位所有Flag开头的列,通过行求和判断是否全为NA,再赋值:
# 假设数据框名为df flag_cols <- grepl("^Flag", names(df)) df$match[rowSums(!is.na(df[, flag_cols])) == 0] <- NA
内容的提问来源于stack exchange,提问作者ltong
相关产品推荐
相关产品推荐

