【发布时间】:2018-07-05 15:19:56
【问题描述】:
我保证有一种更简单的方法可以实现我的目标。我需要计算数据帧的非 NA 值,按所述数据帧中的一列分组。 *这是我关于stackoverflow的第一个问题,请耐心等待。
这是我当前的代码:
测试数据:
grouping <- c(1234,5678,2359)
column1 <- c('asdf',NA,NA)
column2 <- c(NA,'asdf','asdf')
column3 <- c('asdf',NA,'asdf')
litmus <- data.frame(grouping, column1, column2, column3)
获取不同的组列表:
distinct_groups <- as.data.frame(litmus %>% distinct(grouping))
length(distinct_groups$grouping)
执行循环以通过分组并放入列表来计算非NA值
count_non_NA = list()
for (i in 1:length(distinct_groups$grouping)){
count_non_NA[[i]]<-apply(litmus[grouping == as.numeric(distinct_groups$grouping[i]),], 2, function(x) length(which(!is.na(x))))}
将组名输入列表并转换为数据框
names(count_non_NA) <- distinct_groups$grouping
count_non_NA <- as.data.frame(count_non_NA)
count_non_NA
【问题讨论】:
-
我使用 stats 中的聚合函数将其汇总在一起。
aggregate(litmus, by = list(groupingnonNA = grouping), FUN = function(x){sum(!is.na(x))})我不确定这是否符合您想要的输出,所以没有作为答案提交,但希望您可以编辑以满足要求