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

R语言按Name分组计算Repeat和Allowed均为Yes的行占比实现方法

解决方案

dplyr 实现

你原代码的错误有两处:

  1. 提前执行filter会把无符合条件记录的分组(比如C)直接过滤,导致最终结果缺失对应Name的行
  2. 分母用length(df$Name)取的是全数据集总行数,不是每个分组的总行数,计算的比例不符合要求

正确写法如下:

library(dplyr)

df1 <- data.frame(Name = c("A", "B", "C", "A", "B", "B", "C", "C", "A", "A"),
                  Repeat = c("Yes", "Yes", "No", "Yes", "Yes", "Yes", "No", "No", "Yes", "Yes"),
                  Allowed = c("Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "No", "No"))

df_results <- df1 %>%
  group_by(Name) %>%
  summarise(
    Calculation = sum(Repeat == "Yes" & Allowed == "Yes") / n()
  )

print(df_results)
#> # A tibble: 3 × 2
#>   Name  Calculation
#>   <chr>       <dbl>
#> 1 A             0.5
#> 2 B             1  
#> 3 C             0

base R aggregate 实现

如果你想用base R的aggregate函数,正确写法如下:

df1$flag <- df1$Repeat == "Yes" & df1$Allowed == "Yes"
df_results <- aggregate(flag ~ Name, data = df1, FUN = function(x) sum(x)/length(x))
colnames(df_results)[2] <- "Calculation"

print(df_results)
#>   Name Calculation
#> 1    A         0.5
#> 2    B         1.0
#> 3    C         0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:54:03