You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在R语言DataFrame中按行计算逻辑值总和并保留所有原有变量

解决方案:保留所有变量并计算行内TRUE值总和

你遇到的问题根源在于先使用select(V1:V3)过滤掉了ID列,后续操作只在这个子数据集里进行,所以最终结果丢失了原有变量。下面给你几个简单有效的方法,既能计算每行TRUE的数量,又能完整保留所有原有列:

方法1:直接指定求和列范围(最直观)

不用提前筛选列,而是在mutate里通过select(., V1:V3)精准定位需要求和的列,这样原有列都会被保留:

library(dplyr)
tb %>% mutate(out = rowSums(select(., V1:V3)))

运行后得到的结果会包含所有原有变量:

ID    V1    V2    V3 out
1  a  TRUE FALSE  TRUE   2
2  b FALSE FALSE  TRUE   1
3  c  TRUE  TRUE FALSE   2

方法2:按列名规则批量选择(更灵活)

如果你的逻辑列都有统一命名规则(比如都是V开头),可以用starts_with这类辅助函数批量选择,就算以后新增类似列也不用修改代码:

tb %>% mutate(out = rowSums(select(., starts_with("V"))))

方法3:使用rowwise + c_across(适合逐行操作场景)

如果需要更精细化的逐行处理,可以结合rowwise()c_across,不过这种方法对大数据集的效率略低于前两种:

tb %>% 
  rowwise() %>% 
  mutate(out = sum(c_across(V1:V3))) %>% 
  ungroup()

小提示

逻辑值TRUE在R中会被自动转换为1,FALSE转换为0,所以rowSums直接就能计算每行的TRUE数量,不需要额外转换类型。

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

火山引擎 最新活动