如果我有一张表,如:
cc = c("i", "am", "useless", 0, 2, 4, 5)
aa = c("red", "blue", "red", "red", "blue", "green", "green")
bb = c(1, 1, 0, NA, 1, 1, 0)
data <- data.frame(aa, bb, cc)
> data
aa bb cc
1 red 1 i
2 blue 1 am
3 red 0 useless
4 red NA 0
5 blue 1 2
6 green 1 4
7 green 0 5
我只想要像
这样的东西 propOf1
red 1/3
blue 1
green 1/2
基本上我只是得到“1”的比例相对于每个独特类别的整个人口规模。
答案 0 :(得分:1)
您可以使用dplyr
执行此操作。您按aa
分组,然后汇总1的数量除以总计数n()
。
library(dplyr)
data %>% group_by(aa) %>% summarise(propOf1 = sum(bb=="1",na.rm = T)/n())
## A tibble: 3 x 2
# aa propOf1
# <fct> <dbl>
#1 blue 1.00
#2 green 0.500
#3 red 0.333
答案 1 :(得分:0)
使用基础R你可以运行
with(data, tapply(!is.na(bb) & bb == 1, data$aa, mean, na.rm = TRUE))
# blue green red
# 1.0000000 0.5000000 0.3333333
答案 2 :(得分:0)
data$bb[is.na(data$bb)] <- 0
aggregate(data$bb, by = list(data$aa), FUN = function(x) sum(x)/length(x))