r - 计算 R 中每年没有 N/A 的观察次数

标签 r count dplyr missing-data

我有一个数据集,我想总结没有缺失值的观察次数(用 NA 表示)。

我的数据类似如下:

data <- read.table(header = TRUE, 
               stringsAsFactors = FALSE, 
               text="CompanyNumber ResponseVariable Year ExplanatoryVariable1 ExplanatoryVariable2
               1 2.5 2000 1 2
               1 4 2001 3 1
               1 3 2002 NA 7
               2 1 2000 3 NA
               2 2.4 2001 0 4
               2 6 2002 2 9
               3 10 2000 NA 3")

我打算使用 dplyr 包,但这只考虑了年份而不是不同的变量:

library(dplyr)
data %>% 
  group_by(Year) %>%
  summarise(number = n())

如何获得以下结果?

                    2000 2001 2002
ExplanatoryVariable1  2   2    1 
ExplanatoryVariable2  2   2    2

最佳答案

要获得计数,您可以从使用开始:

library(dplyr)
data %>% 
  group_by(Year) %>% 
  summarise_at(vars(starts_with("Expla")), ~sum(!is.na(.)))
## A tibble: 3 x 3
#   Year ExplanatoryVariable1 ExplanatoryVariable2
#  <int>                <int>                <int>
#1  2000                    2                    2
#2  2001                    2                    2
#3  2002                    1                    2

如果您想按照问题所示 reshape 它,您可以使用 tidyr 函数扩展管道:

library(tidyr)
data %>% 
  group_by(Year) %>% 
  summarise_at(vars(starts_with("Expla")), ~sum(!is.na(.))) %>% 
  gather(var, count, -Year) %>% 
  spread(Year, count)
## A tibble: 2 x 4
#                   var `2000` `2001` `2002`
#*                <chr>  <int>  <int>  <int>
#1 ExplanatoryVariable1      2      2      1
#2 ExplanatoryVariable2      2      2      2

只是让 OP 知道,因为他们有大约 200 个解释变量可供选择。您可以使用 summarise_at 的另一个选项来选择变量。如果它们在数据中的顺序正确,您可以简单地命名 first:last 变量,例如:

data %>% 
  group_by(Year) %>%
  summarise_at(vars(ExplanatoryVariable1:ExplanatoryVariable2), ~sum(!is.na(.))) 

或者:

data %>% 
  group_by(Year) %>% 
  summarise_at(3:4, ~sum(!is.na(.))) 

或者将变量名存储在一个向量中并使用它:

vars <- names(data)[4:5]
data %>% 
  group_by(Year) %>% 
  summarise_at(vars, ~sum(!is.na(.))) 

关于r - 计算 R 中每年没有 N/A 的观察次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45882538/

相关文章:

r - 连接误差线的平均点

r - 使用 dplyr 对热图进行排序

php - zend 左连接计数不起作用

mysql - 带连接的聚合函数

r - 使用动态创建的变量来选择 mutate 中的列

r - 如何更改 ggplot (geom_bin2d) 中箱的颜色以反射(reflect)该区域的密度与数据集中的平均密度之间的差异?

r - 在 R 中对齐打印字符串的标准工具是什么?

sql - Rmarkdown - 使用表名作为动态 sql block 中的变量?

r - 使用 ggplot2 编写一个简单的函数

mysql - 选择日期相等且 ID 相等的行,并将这些行计为一个