如何找到分组列的长度,不包括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_if
和summarise_all
上尝试了多种变体,但他们要么犯了错误,要么没有计算出正确的事情。
counts <- df %>%
group_by(State) %>%
summarise_all(funs(length(!is.na(.))))
答案 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