首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从:按列计算非NA值,按其中一列分组

从:按列计算非NA值,按其中一列分组
EN

Stack Overflow用户
提问于 2018-07-05 15:19:56
回答 3查看 609关注 0票数 2

我保证有更简单的方法来完成我的目标。我需要计算数据帧的非NA值,按所述数据帧中的一列分组。*这是我关于堆叠溢出的第一个问题,请耐心点。

以下是我的当前代码:

测试数据:

代码语言:javascript
复制
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)

获取不同的组列表:

代码语言:javascript
复制
distinct_groups <- as.data.frame(litmus %>% distinct(grouping))
length(distinct_groups$grouping)

执行循环,通过分组并放入列表来计数非NA值。

代码语言:javascript
复制
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))))}

将组名输入列表并转换为dataframe

代码语言:javascript
复制
names(count_non_NA) <- distinct_groups$grouping
count_non_NA <- as.data.frame(count_non_NA)
count_non_NA
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-05 15:28:04

我们可以使用summarise_all

代码语言:javascript
复制
library(dplyr)
litmus %>% 
   group_by(grouping) %>% 
   summarise_all(funs(sum(!is.na(.))))
票数 1
EN

Stack Overflow用户

发布于 2018-07-05 15:27:16

我添加了一些额外的观察,这样您就可以看到分组是如何工作的,假设每个组只有一个观察。

代码语言:javascript
复制
library(dplyr)

grouping <- c(1234,5678,2359, 1234,5678,2359)
column1 <- c('asdf',NA,NA, 'asdf',NA,NA)
column2 <- c(NA,'asdf','asdf', NA,'asdf','asdf')
column3 <- c('asdf',NA,'asdf', 'asdf',NA,'asdf')
litmus <- data.frame(grouping, column1, column2, column3)

litmus %>% 
  dplyr::group_by(grouping) %>% 
  dplyr::summarise_at(vars(column1:column3), ~ sum(!(is.na(.))))

# # A tibble: 3 x 4
#   grouping column1 column2 column3
#   <dbl>   <int>   <int>   <int>
#   1234       2       0       2
#   2359       0       2       2
#   5678       0       2       0
票数 1
EN

Stack Overflow用户

发布于 2018-07-05 15:36:47

可以是每个向量的sum(!is.na(column name)) .

对于使用dplyr的数据帧:

代码语言:javascript
复制
df%>%group_by(grouping_variable)%>%summarise("nonNAcol1"= sum(!is.na(col1name),

( .....so on.for其他列)

对于数目未知的列或seq_along列,可以使用更多的通用解决方案。检查以便获得更多和dplyr教程。R4ds第5章.http://r4ds.had.co.nz/transform.html

干杯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51194922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档