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

在R语言中使用pick与rowSums统计a类变量非缺失值的问题

问题分析与修正

原代码存在几个关键问题:

  • 函数anymatch逻辑错误:is.na(vars)是对变量名向量判断是否缺失,而非判断数据列中的值是否非缺失;且统计的是缺失值数量,和需求的「已填写实例数」完全相反。
  • 函数调用参数不匹配:定义的目标变量是avars,但调用时传了未定义的vars。

修正后的代码方案

方案1:修正原函数逻辑

library(dplyr)

anymatch <- function(vars){
  # 先选中指定列,再判断每个值是否非缺失,最后按行求和
  rowSums(!is.na(pick(all_of(vars))), na.rm = TRUE)
}

data <- tibble(
  a1 = c("Yes", NA, "No", "Dont know"),
  a2 = c("No", NA, "No", NA),
  a3 = c("Good", "Bad", "Good", NA),
  b1 = c(20, 34, 23, 45)
)

avars <- data |> select(starts_with("a")) |> names()
  
data |> 
  mutate(acount = anymatch(avars))

方案2:更简洁的链式写法(无需自定义函数)

library(dplyr)

data <- tibble(
  a1 = c("Yes", NA, "No", "Dont know"),
  a2 = c("No", NA, "No", NA),
  a3 = c("Good", "Bad", "Good", NA),
  b1 = c(20, 34, 23, 45)
)

data |> 
  mutate(acount = rowSums(!is.na(pick(starts_with("a"))), na.rm = TRUE))

结果说明

运行修正后的代码,会得到每行中a开头列的非缺失值计数:

  • 第1行:3个非缺失值
  • 第2行:1个非缺失值(仅a3有值)
  • 第3行:3个非缺失值
  • 第4行:1个非缺失值(仅a1有值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:39:59