R语言如何统计数据列小于指定数值的行数并输出结构化汇总表
问题原因
- 第一次代码返回空tibble:
nrow()的统计对象是数据框、矩阵这类二维结构,你传入的S2S_Mins < 5是逻辑向量,nrow()对向量返回NULL,最终生成的汇总表就没有有效列。 - 第二次代码报参数错误:dplyr的
n()函数没有入参,作用是直接统计当前分组的总行数,你传入的逻辑条件属于多余参数,因此触发报错。
正确实现方法
你原本用sum(逻辑条件, na.rm = TRUE)统计符合条件行数的逻辑是对的,直接套用到summarise里即可,再配合长表转换就能得到你要的TimeCategory+Count结构的汇总表:
library(dplyr) library(tidyr) # 方法1:直接写阈值生成汇总表 count_df <- summary %>% summarise( 小于5 = sum(S2S_Mins < 5, na.rm = TRUE), 小于10 = sum(S2S_Mins < 10, na.rm = TRUE), 小于20 = sum(S2S_Mins < 20, na.rm = TRUE), 小于30 = sum(S2S_Mins < 30, na.rm = TRUE), 小于60 = sum(S2S_Mins < 60, na.rm = TRUE) ) %>% # 宽表转长表,匹配你要的输出结构 pivot_longer(cols = everything(), names_to = "TimeCategory", values_to = "Count")
如果后续阈值需要调整、新增,更简洁的写法是用purrr批量遍历阈值,不需要重复写sum语句:
library(dplyr) library(purrr) # 自定义所有要统计的阈值 thresholds <- c(5, 10, 20, 30, 60) count_df <- tibble( TimeCategory = paste0("小于", thresholds), Count = map_dbl(thresholds, ~ sum(summary$S2S_Mins < .x, na.rm = TRUE)) )
用你提供的50行样本数据运行后,得到的汇总结果如下:
| TimeCategory | Count |
|---|---|
| 小于5 | 0 |
| 小于10 | 0 |
| 小于20 | 8 |
| 小于30 | 17 |
| 小于60 | 39 |
内容的提问来源于stack exchange,提问作者new2data
相关产品推荐
相关产品推荐

