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

按城市分组统计满足hour>=6的案例数及占比技术问询

解决按城市分组统计满足条件案例数及占比的问题

嘿,我来帮你搞定这个需求!你已经用aggregate()算出了hour的均值,那咱们把思路稍微扩展一下,就能轻松得到你要的满足hour>=6的案例数和对应占比啦。

先从你给的示例数据开始,咱们先把数据构造出来方便演示:

# 构造示例数据
df <- data.frame(
  city = c("A", "A", "A", "B", "C"),
  hour = c(7, 6, 3, 2, 7)
)

方法1:用你熟悉的aggregate()函数

既然你已经在使用aggregate(),那咱们就从这个函数入手。核心思路是先标记每条记录是否满足条件,再分组统计:

  1. 先给数据添加一个标记列,把hour>=6的记录标记为1,否则为0:
df$meet_condition <- as.integer(df$hour >= 6)
  1. 分别用aggregate()统计每个城市满足条件的案例数,以及总案例数:
# 统计满足条件的数量
count_meet <- aggregate(meet_condition ~ city, data = df, sum)
colnames(count_meet)[2] <- "count_meet"

# 统计每个城市的总案例数
count_total <- aggregate(meet_condition ~ city, data = df, length)
colnames(count_total)[2] <- "count_total"
  1. 把两个统计结果合并,再计算占比:
# 合并数据并计算占比
result <- merge(count_meet, count_total, by = "city")
result$proportion <- result$count_meet / result$count_total

运行完上面的代码,result就是你要的结果啦:

city count_meet count_total proportion
1    A          2           3  0.6666667
2    B          0           1  0.0000000
3    C          1           1  1.0000000

(注:你示例里写B的满足数是1,但原数据里B的hour是2,所以实际满足数是0,占比0哦)

方法2:用dplyr更简洁高效(推荐)

如果愿意尝试更直观的语法,dplyr包的分组操作会让代码更简洁,可读性也更强:

首先确保你安装并加载了dplyr:

install.packages("dplyr") # 如果没安装过的话
library(dplyr)

然后一行流搞定所有统计:

result <- df %>%
  group_by(city) %>%
  summarise(
    count_meet = sum(hour >= 6), # 求和逻辑值,自动转为1/0计算数量
    count_total = n(), # 获取分组内总条数
    proportion = count_meet / count_total
  ) %>%
  ungroup()

这个方法的逻辑和第一种一致,但代码更紧凑,处理大规模数据时效率也更高,日常数据分析里用得很多~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:04:38