这是我的例子
mydf<-data.frame('col_1' = c('A','A','B','B'), 'col_2' = c(100,NA, 90,30))
我希望按照col_1
进行分组,并计算在col_2
中非NA
元素的数量。
我希望使用dplyr
完成此操作。以下是我尝试过的代码:
mydf %>% group_by(col_1) %>% summarise_each(funs(!is.na(col_2)))
mydf %>% group_by(col_1) %>% mutate(non_na_count = length(col_2, na.rm=TRUE))
mydf %>% group_by(col_1) %>% mutate(non_na_count = count(col_2, na.rm=TRUE))
什么都没用。有什么建议吗?
summarise_all(funs(sum(!is.na(.))))
。这将返回每列中非缺失值的总数。 - cacti5my_df%>% group_by(col_1)%>% summarize(col_1 = mean(col_1,na.rm = T),non_na_count = sum(!is.na(col_2)))
产生的结果与my_df%>% group_by(col_1)%>% summarize(non_na_count = sum(!is.na(col_2)),col_1 = mean(col_1,na.rm = T))
不同。 - zacksummarise
时,应该尝试使用col_2 = mean(col_2, na.rm = T)
而不是col_1 = mean(col_1, na.rm = T)
。使用dplyr版本0.8.3,我得到了不同的结果。 - zack!is.na()
将数据转换为 TRUE/FALSE。sum() 将 TRUE 视为 1,FALSE 视为 0,因此总和是非 NA 值的计数。 - Richard Telford