R语言按greenbond字段判断生成新列 检测指定列NA值报错求解
错误原因
- 语法问题:原有代码中
is.na(df[2:3],)多写了多余的逗号,给函数传入了无效空参数,因此触发“argument 2 missing”报错 - 逻辑问题:
is.na()作用于多列数据框时会返回同维度的逻辑矩阵,ifelse是逐元素运算函数,无法直接基于矩阵判断每行的2-3列是否存在缺失值
高效修正方案
你需要的是行维度的缺失值判断,用R自带的向量化运算函数效率最高,完全适配多列、大数据量的场景,有两种常用写法:
写法1:语义化写法(更易读)
用complete.cases()直接判断每行的指定列是否无缺失值:
greenbond <- c(1,0,1) A <- c(1,0,NA) B <- c(1,0,0) df <- data.frame(greenbond,A,B) df$test <- ifelse(df$greenbond == 0, NA, complete.cases(df[2:3]))
写法2:灵活写法(可扩展)
用rowSums()统计每行缺失值数量,方便后续调整缺失值数量阈值:
df$test <- ifelse(df$greenbond == 0, NA, rowSums(is.na(df[2:3])) == 0)
运行结果
最终生成的df符合预期逻辑:
| greenbond | A | B | test |
|---|---|---|---|
| 1 | 1 | 1 | TRUE |
| 0 | 0 | 0 | NA |
| 1 | NA | 0 | FALSE |
内容的提问来源于stack exchange,提问作者thomas.diridondo
相关产品推荐
相关产品推荐

