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

如何在R中统计数据集中每个ID对应变量的"Yes"数量

统计每行"Yes"数量并新增Count列的R实现

嘿,这事儿简单得很,给你两种常用的R实现方法,你看哪种顺手就用哪种:

第一步:先构造你的示例数据集

先把你给出的数据转换成R里可操作的data.frame:

df <- data.frame(
  ID = 1:7,
  Var1 = c("Yes", "No", "Yes", "No", "No", "No", "Yes"),
  Var2 = c("No", "No", "Yes", "No", "Yes", "No", "Yes"),
  Var3 = c("Yes", "No", "Yes", "No", "Yes", "Yes", "No"),
  Var4 = c("No", "No", "Yes", "No", "No", "No", "No"),
  Var5 = c("No", "No", "No", "No", "No", "No", "No"),
  Var6 = c("Yes", "No", "Yes", "No", "Yes", "Yes", "No"),
  stringsAsFactors = FALSE # 避免自动转成因子,方便后续比较
)

方法一:基础R原生方法(无需额外包)

用rowSums函数直接统计每行中等于"Yes"的元素个数,简单高效:

# 选中Var1到Var6的列,判断是否为"Yes",再对每行求和
df$Count <- rowSums(df[, paste0("Var", 1:6)] == "Yes")

解释:paste0("Var", 1:6)自动生成Var1到Var6的列名,选中这些列后和"Yes"比较会得到一个布尔矩阵,rowSums会对每行的TRUE(即"Yes")计数求和。

方法二:tidyverse/dplyr方法(代码更直观)

如果你平时习惯用tidyverse系列工具,可以用dplyr的函数来实现:

# 先加载dplyr包
library(dplyr)

# 方法2.1:用rowwise + c_across逐行计算
df <- df %>%
  rowwise() %>%
  mutate(Count = sum(c_across(Var1:Var6) == "Yes")) %>%
  ungroup() # 记得取消逐行模式,避免后续操作变慢

# 方法2.2:更高效的rowSums + across版本(适合大数据集)
df <- df %>%
  mutate(Count = rowSums(across(Var1:Var6) == "Yes"))

最终结果

运行任意一种方法后,你的数据集会新增Count列,结果如下:

print(df)
#   ID Var1 Var2 Var3 Var4 Var5 Var6 Count
# 1  1  Yes   No  Yes   No   No  Yes     3
# 2  2   No   No   No   No   No   No     0
# 3  3  Yes  Yes  Yes  Yes   No  Yes     5
# 4  4   No   No   No   No   No   No     0
# 5  5   No  Yes  Yes   No   No  Yes     3
# 6  6   No   No  Yes   No   No  Yes     2
# 7  7  Yes  Yes   No   No   No   No     2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:35:15