创建包含的比例表NA

时间:2018-05-16 19:30:24

标签: r

如果我有一张表,如:

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”的比例相对于每个独特类别的整个人口规模。

3 个答案:

答案 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))