You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在R中按组计算相对频率及组内相对频率总和?

解决方案:实现分组相对频率及求和需求

当然可以实现这个需求!下面是基于你已有的数据框,用dplyr包完成的代码方案,完美贴合你想要的输出:

library(dplyr)

# 处理数据,生成IdealOutput列
LikelyRenew_ReasonB_processed <- LikelyRenew_ReasonB %>%
  group_by(Name) %>%
  # 提取每组x=4对应的cum_Sum作为分组总分母
  mutate(group_denominator = cum_Sum[x == 4],
         # 计算相对频率(转百分比,保留两位小数)
         rel_freq = round(freq / group_denominator * 100, 2)) %>%
  # 生成目标输出列:x≠4时用相对频率,x=4时用前3行相对频率的总和
  mutate(IdealOutput = ifelse(x != 4, 
                              rel_freq, 
                              sum(rel_freq[x %in% 1:3], na.rm = TRUE))) %>%
  ungroup()

# 查看处理后的结果(以costC组为例)
LikelyRenew_ReasonB_processed %>% filter(Name == "costC")

代码解释:

  • 分组处理:用group_by(Name)确保每个Name组独立计算,不会互相干扰
  • 获取分组分母group_denominator提取每组中x=4对应的cum_Sum值(也就是你示例中的187),作为该组所有行的计算分母
  • 计算相对频率rel_freqfreq除以分组分母,转成百分比并保留两位小数,和你给出的示例格式一致
  • 生成目标列IdealOutput通过ifelse判断,非x=4的行直接用相对频率;x=4的行则求和该组x=1到3的相对频率

处理后costC组的输出示例:

# A tibble: 4 × 6
  Name   x   freq cum_Sum group_denominator rel_freq IdealOutput
  <chr> <dbl> <int>   <int>             <int>    <dbl>       <dbl>
1 costC     1    10      10               187     5.35        5.35
2 costC     2    11      21               187     5.88        5.88
3 costC     3    17      38               187     9.09        9.09
4 costC     4   149     187               187    79.6       20.32

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

火山引擎 最新活动