R语言按SID分组统计TorL、TorH计数并生成汇总表
R语言批量分组统计TorL/TorH计数方案
你逐行硬编码每个SID的计数方式效率太低,直接用分组汇总逻辑一次性跑完351-358所有SID的统计,输出结构完全匹配你需要的三列表格,统计逻辑和你原有length(which())的写法完全等价。
无需安装额外包的Base R实现
直接用内置的aggregate函数做分组计算即可:
# 若你的数据中不存在351-358以外的SID,可跳过子集筛选步骤 tor_filtered <- tor[tor$SID %in% 351:358, ] # 按SID分组统计TorL、TorH取值为1的样本量 count_result <- aggregate( cbind(TorL, TorH) ~ SID, data = tor_filtered, FUN = function(x) sum(x == 1, na.rm = TRUE) ) # 打印结果 print(count_result)
输出格式如下(自动补全353-358的统计结果):
SID TorL TorH 1 351 3843 155 2 352 223 96 3 353 ... ...
说明:
- 参数里加
na.rm = TRUE是为了自动跳过数据中的缺失值,避免结果返回NA;如果你确认数据集里没有缺失值,可直接把统计逻辑简化为对列求和,运行速度更快。- 你手动敲的示例结果表格里352行的TorL、TorH值写反了,上述代码直接读取原始数据计算,不会出现手动录入的错位问题。
dplyr实现(适合日常做数据处理的场景)
如果你平时用tidyverse生态做数据处理,代码可读性更高:
library(dplyr) count_result <- tor %>% filter(SID %in% 351:358) %>% # 无其他SID可省略这行 group_by(SID) %>% summarise( TorL = sum(TorL == 1, na.rm = TRUE), TorH = sum(TorH == 1, na.rm = TRUE), .groups = "drop" )
两种方法输出的结果都是标准data.frame格式,可以直接拿去做后续相关性分析。
内容的提问来源于stack exchange,提问作者thewal
相关产品推荐
相关产品推荐

