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

如何在R中按misc分组计算小于指定值的数据行占比?

实现方法

对于你的需求,用dplyr和tidyr两个工具包就能简单实现,步骤如下:

1. 准备工作(安装并加载包)

如果还没安装这两个包,先运行:

install.packages(c("dplyr", "tidyr"))

然后加载包:

library(dplyr)
library(tidyr)

2. 构造原始数据框

把你给出的数据转换成R的dataframe:

df <- data.frame(
  misc = c("a", "a", "a", "b", "b", "b", "c", "c", "c"),
  data = c(0.0, 0.1, 0.2, 0.0, 0.2, 0.3, 0.0, 0.4, 0.6)
)

3. 生成目标data序列

按照你的要求生成指定范围的序列:

target_data <- seq(0.0, 10.0, by = 0.01)

4. 计算每个misc分组的比例

通过分组、扩展笛卡尔积、计算符合条件的行数占比来实现:

result_df <- df %>%
  # 按misc分组
  group_by(misc) %>%
  # 给每个分组匹配所有目标data值
  expand(data = target_data) %>%
  # 计算比例:当前分组中原始data小于当前目标data的行数 / 分组总行数
  mutate(proportion = sum(df$data[df$misc == misc] < data) / length(df$data[df$misc == misc])) %>%
  # 取消分组
  ungroup()

验证结果

你可以查看指定分组的前几行,和你给出的示例匹配:

head(result_df[result_df$misc == "a", ])
head(result_df[result_df$misc == "c", ])

关键代码说明

  • expand(data = target_data):给每个misc分组添加所有目标data值,形成笛卡尔积,确保每个misc对应所有目标data。
  • sum(df$data[df$misc == misc] < data):统计当前分组中原始data小于当前目标data的行数。
  • length(df$data[df$misc == misc]):获取当前分组的总行数(比如a组固定有3行)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:12:14