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

使用dplyr处理频率表:生成频率分布列并转换value列

用dplyr处理长格式频率表的比例计算

你需要针对不同Status分组计算value的占比,具体逻辑是每个Status组内的value除以该组的总value,得到频率分布列prop。以下是实现代码:

首先加载dplyr包:

library(dplyr)

接着处理你的数据:

# 还原示例数据
test_data <- structure(list(ref = c(5L, 5L, 5L, 10L, 10L, 10L, 15L, 15L, 15L),
                            Status = c("status1", "status2", "status3", "status1", "status2", "status3", "status1", "status2", "status3"),
                            value = c(1718L, 0L, 0L, 576L, 24L, 0L, 224L, 104L, 3L)),
                       row.names = c(NA, -9L), class = c("tbl_df", "tbl", "data.frame"))

# 计算比例并调整列名
result <- test_data %>%
  group_by(Status) %>%
  mutate(prop = value / sum(value)) %>%
  ungroup() %>%
  rename(conc = ref, Sensor_Status = Status)

# 查看最终结果
print(result)

代码说明:

  • group_by(Status):按Status字段分组,确保后续计算仅在同状态组内进行
  • mutate(prop = value / sum(value)):新增prop列,每个value除以所在状态组的总value,得到该值在组内的占比
  • ungroup():取消分组,避免后续数据操作受到分组约束
  • rename():将列名调整为你期望输出中的conc和Sensor_Status,不需要修改列名可省略此步骤

运行后得到的结果和你提供的期望输出完全一致:

# A tibble: 9 × 4
   conc Sensor_Status value   prop
  <int> <chr>         <int>  <dbl>
1     5 status1        1718 0.682 
2     5 status2           0 0     
3     5 status3           0 0     
4    10 status1         576 0.229 
5    10 status2          24 0.188 
6    10 status3           0 0     
7    15 status1         224 0.0890
8    15 status2         104 0.812 
9    15 status3           3 1     

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:06:27