You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言数据框中用ifelse/case_when统计代码数量的问题

解决定性编码数据集非NA编码计数问题

针对你需要统计每行Code1到Code4中非NA编码数量的需求,这里提供几种简单高效的实现方法,同时帮你分析之前代码的问题:

方法一:用rowSums快速实现(最推荐)

这是最简洁的写法,利用!is.na()把非NA值转为逻辑值TRUE(对应数值1),NA转为FALSE(对应数值0),再用rowSums对每行求和,直接得到非NA的数量:

# 基础R写法
df$count <- rowSums(!is.na(df[, c("Code1", "Code2", "Code3", "Code4")]))

# dplyr管道写法
df <- df %>%
  mutate(count = rowSums(!is.na(across(c(Code1, Code2, Code3, Code4)))))

方法二:用dplyr行级操作实现

如果需要更灵活的行级计算,可以用rowwise()配合c_across()实现:

df <- df %>%
  rowwise() %>%
  mutate(count = sum(!is.na(c_across(Code1:Code4)))) %>%
  ungroup() # 记得取消行分组,避免影响后续的批量操作

你之前代码的问题分析

ifelse写法的问题

你分步用ifelse赋值的逻辑完全错误:每次赋值都会覆盖上一次的结果,而且只是单独判断某一个变量是否为NA,根本没有统计所有非NA变量的总数,自然无法得到正确结果。

case_when写法的问题

你的case_when有两个致命错误:

  1. 最后一行xor(Code1,Code2)没有遵循条件 ~ 结果的双边公式格式,这是导致报错的直接原因。
  2. 逻辑错误:case_when是按顺序匹配第一个满足的条件就返回结果,你的写法是只要Code1非NA就返回1,不管其他变量有没有值,这不是统计总数,而是判断单个变量是否存在,完全不符合需求。

内容的提问来源于stack exchange,提问作者Sammy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:10:30