分组列的长度,不包括NA

时间:2018-02-27 09:59:30

标签: r

如何找到分组列的长度,不包括NA?

例如,使用以下数据框

Year  State var1  var2
TX    2     NA
WA    0     3
CA    NA    1
CA    2     NA
CA    2     3
TX    NA    4
WA    NA    NA
WA    3     3
CA    NA    0

我希望它返回

State var1  var2
TX    1     1
WA    2     2
CA    2     3

已经提出了一些类似的问题(例如R - Get number of values per group without counting NAs),但我仍然在努力获得我想要的输出。

我已经在summarise_ifsummarise_all上尝试了多种变体,但他们要么犯了错误,要么没有计算出正确的事情。

counts <- df %>%
group_by(State) %>% 
summarise_all(funs(length(!is.na(.))))

3 个答案:

答案 0 :(得分:1)

只需创建一个匿名函数,它返回is.na()返回的逻辑向量的总和:

library(dplyr)

df %>% 
  group_by(State) %>% 
  summarise_all(.funs = function(x) { sum(!is.na(x)) })

# A tibble: 3 x 3
   State  var1  var2
  <fctr> <int> <int>
1     CA     2     3
2     TX     1     1
3     WA     2     2

答案 1 :(得分:1)

使用data.table:

library(data.table)
setDT(df)
df[,lapply(.SD, function(x) sum(!is.na(x))),State]

   State var1 var2
1:    TX    1    1
2:    WA    2    2
3:    CA    2    3

答案 2 :(得分:0)

dplyr方法:

df=tibble(State,var1,var2)%>%group_by(State)%>%summarize(var1=sum(!is.na(var1)),var2=sum(!is.na(var2)))
> df
# A tibble: 3 x 3
  State  var1  var2
  <chr> <int> <int>
1 CA        2     3
2 TX        1     1
3 WA        2     2
相关问题