按变量分组计算有效/非NA观测的数量

3
我已经谷歌了大约两个小时,试图找到一个简单问题的解决方案,但是我一无所获。我甚至找不到合适的函数来达到我想要的目标,所以我不得不求助于他人,尽管这似乎是一个非常基本的问题。
我有一个跨越多个国家的调查,并且正在创建一个包含从数据中派生的统计信息(例如给定变量的国家平均值)的数据框。
假设数据框 df 看起来像这样:
country <- c(1,1,1,1,1,1,2,2,2,2,2,2)
var <- c(1,NA,2,1,2,2,3,3,1,3,4,NA)

df <- cbind.data.frame(country, var)

我可以轻松地数出名词n的个数:
df %>% group_by(country) %>% summarize(n=n())

但是我如何计算变量var上的有效观察值?

你能请分享你预期的结果吗? - Quinten
1
通过"统计有效观测值",你的意思是"计算不是NA的数值的个数"吗?如果是的话,使用summarize(non_na_count = sum(!is.na(var))) - Gregor Thomas
1
group_by之前加上na.exclude() %>% - Rui Barradas
啊是的,我本来是想计算非 NA 值的数量。编辑了标题以便澄清。谢谢!我尝试使用 is.na 进行一些操作,但是由于 table(is.na) 会输出 true-false,我以为我必须从中提取 FALSE 的计数。没有想到可以简单地尝试 sum - SpecialK201
@RuiBarradas的解决方案也很好。谢谢。 - SpecialK201
1个回答

2

任何一个都可以。
三个函数调用group_by()/summarise()/n()可以被一个函数count()替代。

country <- c(1,1,1,1,1,1,2,2,2,2,2,2)
var <- c(1,NA,2,1,2,2,3,3,1,3,4,NA)

df <- cbind.data.frame(country, var)

suppressPackageStartupMessages(
  library(dplyr)
)


df %>% 
  na.exclude() %>%
  count(country)
#>   country n
#> 1       1 5
#> 2       2 5

df %>% 
  na.omit() %>%
  count(country) 
#>   country n
#> 1       1 5
#> 2       2 5

df %>% 
  tidyr::drop_na() %>%
  count(country)
#>   country n
#> 1       1 5
#> 2       2 5

创建于2023-08-08,使用reprex v2.0.2


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接