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

如何在R语言中统计多列中“No”的出现次数

统计每行多列中"no"的出现次数

给定如下R数据集:

id = c(1,2,3,4,5,6,7,8)
trat = c("a","b","a","b","a","b","a","b")
var1 = c("no","no","no","no","yes",NA,NA,"no")
var2 = c("yes","yes","no","no","yes","no",NA,"no")
df = data.frame(id,trat,var1,var2)

需要为每行统计var1和var2列中"no"的出现次数,生成count_no列,最终得到目标结果。

以下是几种可行的实现方法:

方法1:使用dplyr(tidyverse)

适合代码可读性高的场景,处理大型数据集也高效:

library(dplyr)

df <- df %>%
  rowwise() %>%
  mutate(count_no = sum(c_across(var1:var2) == "no", na.rm = TRUE)) %>%
  ungroup()
  • rowwise()指定按行计算
  • c_across(var1:var2)选中需要统计的列
  • sum(..., na.rm = TRUE)统计"no"的数量,忽略NA值

方法2:使用base R

无需加载额外包,代码简洁:

df$count_no <- rowSums(df[, c("var1", "var2")] == "no", na.rm = TRUE)
  • df[, c("var1", "var2")] == "no"生成逻辑矩阵,匹配到"no"的位置为TRUE
  • rowSums(..., na.rm = TRUE)按行求和,TRUE对应1,FALSE和NA忽略

方法3:使用data.table(适合超大型数据集)

处理百万级以上数据时速度更优:

library(data.table)
setDT(df)
df[, count_no := rowSums(.SD == "no", na.rm = TRUE), .SDcols = c("var1", "var2")]
  • setDT(df)将数据框转换为data.table格式
  • .SDcols指定需要统计的列,.SD代表这些列的子集
  • rowSums(...)按行统计"no"的数量

运行任意一种方法后,都能得到你期望的结果:

id trat var1 var2 count_no
1  1    a   no  yes        1
2  2    b   no  yes        1
3  3    a   no   no        2
4  4    b   no   no        2
5  5    a  yes  yes        0
6  6    b <NA>   no        1
7  7    a <NA> <NA>        0
8  8    b   no   no        2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:06:09