如何计算非缺失值计数的平均值?

How to compute the mean of counts of non-missing values?

我想首先计算数据框特定列的非缺失值的组数,然后计算其平均值。基本上我想要有关非缺失值(单个值)的组计数平均值的信息。

我设法计算了非缺失值的组计数,但不是其平均值(单个值)。下面的代码没有问题,除了最后一行(我注释掉了它,因为它给了我错误的输出)。

data <- tibble(hosp     = c("1", "1", "1", "1", "1", "1", "1", "2", "2", "2", "2", "2", "2", "2", "3", "3", "3", "3", "3"), 
             from     = c("A", "A", "B", "B", "C", "C", "C", "A", "A", "B", "B", "D", "D", "D", "B", "E", "E", "E", "E"), 
             to       = c("C", "B", "C", "A", "B", "A", "B", "D", "B", "A", "D", "A", "B", "B", "E", "B", "B", "B", "B"),
             hosp_ind = c("" , "3", "" , "" , "2", "2", "3", "" , "3", "" , "" , "1", "1", "3", "" , "1", "1", "2", "2"),
             to_ind   = c("" , "E", "" , "" , "D", "D", "E", "" , "E", "" , "" , "C", "C", "E", "" , "A", "C", "A", "D")) 

summary <- data %>%
  group_by(hosp, from, to) %>%
  summarise(N_iv = sum(!is.na(to_ind))) %>%
  #summarise(mean(N_iv))

我猜你想做的就是那个。 你必须在 summarise 之前 ungroup:


(
  data
  %>% group_by(hosp, from, to)
  %>% mutate(
    hosp_ind = na_if(hosp_ind, ""), 
    to_ind = na_if(to_ind, "") )
  %>% summarise(
    N_iv = sum(!is.na(to_ind)))
  %>% ungroup
  %>% summarise(mean(N_iv))
)

输出:

# A tibble: 1 x 1
  `mean(N_iv)`
         <dbl>
1        0.857

请注意,空字符串 ""NA 不同。这就是我添加这些行的原因:

%>% mutate(
    hosp_ind = na_if(hosp_ind, ""), 
    to_ind = na_if(to_ind, "") )

另一种方法是 pullN_iv 计算其平均值:

(
  data
  %>% group_by(hosp, from, to)
  %>% mutate(
    hosp_ind = na_if(hosp_ind, ""), 
    to_ind = na_if(to_ind, "") )
  %>% summarise(
    N_iv = sum(!is.na(to_ind)))
  %>% pull(N_iv)
  %>% mean
)