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

如何统计DataFrame每行中指定值的出现次数?

在R的DataFrame中新增列统计每行特定值的出现次数

方法1:使用base R的rowSums(推荐,高效)

这是最简洁且性能最优的方式,利用向量化操作直接计算每行中等于目标值的元素个数:

# 补全初始数据(原代码缺失id列定义)
id <- 1:6
X1 <- c(5,1,7,8,1,5)
X2 <- c(5,0,0,2,3,7)
X3 <- c(6,2,3,4,1,7)
X4 <- c(1,1,5,2,1,7)

df <- data.frame(id,X1,X2,X3,X4)

# 新增统计列,统计X1-X4列中值为1的次数
df$one_appears <- rowSums(df[, c("X1", "X2", "X3", "X4")] == 1)

执行后即可得到期望结果:

> df
  id X1 X2 X3 X4 one_appears
1  1  5  5  6  1           2
2  2  1  0  1  1           3
3  3  7  0  3  5           0
4  4  8  2  4  2           0
5  5  1  3  2  1           2
6  6  5  7  7  7           0

方法2:使用base R的apply函数

如果需要逐行处理逻辑,可以用apply逐行遍历指定列并统计:

# 排除id列(第1列),对剩余列逐行统计值为1的个数
df$one_appears <- apply(df[, -1], 1, function(row) sum(row == 1))

注:apply是逐行循环操作,当数据量较大时,性能不如rowSums。

方法3:使用dplyr包(tidyverse风格)

如果你习惯使用tidyverse工具链,可用以下两种方式:

方式A:rowwise + c_across

适合逐行处理复杂逻辑的场景:

library(dplyr)

df <- df %>%
  rowwise() %>%
  mutate(one_appears = sum(c_across(X1:X4) == 1)) %>%
  ungroup() # 取消逐行分组状态

方式B:mutate + rowSums(更高效)

结合向量化操作,性能接近base R的rowSums:

library(dplyr)

df <- df %>%
  mutate(one_appears = rowSums(across(X1:X4) == 1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:05:18