如何为R语言数据框添加相对频率列?
给数据框添加相对频率列的R语言实现
基础R实现方案
直接通过提取总数、条件赋值的方式生成目标列:
- 定义示例数据框:
df <- data.frame( Ausprägung = c("Obs1", "Obs2", "Obs3", "Obs4", "Total"), Anzahl = c(100, 100, 100, 100, 400) )
- 提取总数并计算相对频率:
# 获取Total行的数值作为计算分母 total_count <- df$Anzahl[df$Ausprägung == "Total"] # 添加相对频率列,Total行设为"-" df$`rel. frequency` <- ifelse(df$Ausprägung == "Total", "-", df$Anzahl / total_count)
执行后得到的结果完全符合需求:
| Ausprägung | Anzahl | rel. frequency |
|---|---|---|
| Obs1 | 100 | 0.25 |
| Obs2 | 100 | 0.25 |
| Obs3 | 100 | 0.25 |
| Obs4 | 100 | 0.25 |
| Total | 400 | - |
dplyr实现方案(适合复杂数据集)
如果习惯使用tidyverse工具链,可用dplyr的mutate和case_when完成:
library(dplyr) df <- df %>% # 提取Total行的数值作为临时变量 mutate(total_val = Anzahl[Ausprägung == "Total"]) %>% # 条件生成相对频率列 mutate(`rel. frequency` = case_when( Ausprägung == "Total" ~ "-", TRUE ~ as.character(Anzahl / total_val) )) %>% # 移除临时列 select(-total_val)
补充说明
prop.table()确实仅适用于table对象,无法直接处理数据框的列计算,直接通过数值运算的方式更贴合当前需求。
内容的提问来源于stack exchange,提问作者KingCooper
相关产品推荐
相关产品推荐

