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

如何在R语言中自动化统计数据框中数值小于等于递增阈值的累计数量

轻松实现R中数值区间的自动累计统计

完全不用手动重复70次sum()语句!这里有几种简洁的自动化方案,帮你快速生成从30到2100、步长30的累计统计表格:

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

先生成所有需要统计的BinWidth序列,再用sapply()批量计算每个区间的累计值:

set.seed(917)
dat <- as.data.frame(sample(0:2100,100,replace = F))
colnames(dat)[1] <- "values"

# 生成从30到2100、步长30的bin序列
bins <- seq(30, 2100, by = 30)

# 批量计算每个bin对应的累计数量
counts <- sapply(bins, function(x) sum(dat$values <= x))

# 整理成目标格式的数据框
result <- data.frame(
  BinWidth = bins,
  TotalValuesLessThan = counts
)

# 查看前几行结果(和你的示例格式一致)
head(result)

输出结果:

BinWidthTotalValuesLessThan
301
601
902
1203
1504
1804

方法二:用dplyr+purrr实现(更直观易读)

如果你熟悉tidyverse工具链,这种写法更符合现代R的代码风格:

library(dplyr)
library(purrr)

set.seed(917)
dat <- as.data.frame(sample(0:2100,100,replace = F)) %>%
  rename(values = 1)

result <- tibble(BinWidth = seq(30, 2100, by = 30)) %>%
  mutate(TotalValuesLessThan = map_dbl(BinWidth, ~sum(dat$values <= .x)))

# 同样可以用head(result)查看前几行

方法三:用ecdf函数(大数据场景更高效)

如果你的数据集很大,经验累积分布函数ecdf()会比逐个sum更高效,原理是先构建累积分布,再直接查询每个bin的累计比例,乘以总样本数得到数量:

set.seed(917)
dat <- as.data.frame(sample(0:2100,100,replace = F))
colnames(dat)[1] <- "values"

bins <- seq(30, 2100, by = 30)
# 构建累积分布函数
ecdf_fun <- ecdf(dat$values)
# 计算每个bin的累计数量(转成整数)
counts <- as.integer(ecdf_fun(bins) * nrow(dat))

result <- data.frame(BinWidth = bins, TotalValuesLessThan = counts)

这三种方法都能自动生成到2100的所有统计结果,完全不用手动重复代码~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:32:46