R 分组列的长度,不包括NAs

R 分组列的长度,不包括NAs,r,R,如何查找分组列的长度(不包括NAs) 例如,对于以下数据帧 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 有

如何查找分组列的长度(不包括NAs)

例如,对于以下数据帧

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
有人问过一些类似的问题(例如),但我仍在努力获得我想要的输出

我尝试了几种不同的
summary\u if
summary\u all
,但它们要么抛出错误,要么计算错误

counts <- df %>%
group_by(State) %>% 
summarise_all(funs(length(!is.na(.))))
计数%
按(州)分组%>%
总结所有(funs(长度(!is.na())

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

库(dplyr)
df%>%
按(州)分组%>%
总结所有(.funs=函数(x){sum(!is.na(x))})
#一个tibble:3x3
状态变量1变量2
1 CA 2 3
2 TX 1 1
3 WA 2 2

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

库(dplyr)
df%>%
按(州)分组%>%
总结所有(.funs=函数(x){sum(!is.na(x))})
#一个tibble:3x3
状态变量1变量2
1 CA 2 3
2 TX 1 1
3 WA 2 2
带数据。表格:

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
使用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
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
df=tibble(State,var1,var2)%%>%group_by(State)%%>%summary(var1=sum(!is.na(var1)),var2=sum(!is.na(var2)))
>df
#一个tibble:3x3
状态变量1变量2
1 CA 2 3
2 TX 1 1
3 WA 2 2
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
df=tibble(State,var1,var2)%%>%group_by(State)%%>%summary(var1=sum(!is.na(var1)),var2=sum(!is.na(var2)))
>df
#一个tibble:3x3
状态变量1变量2
1 CA 2 3
2 TX 1 1
3 WA 2 2
sum(!is.na(x))
sum(!is.na(x))