我有一个数据集,我想总结没有缺失值(以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

如果要按问题所示重塑形状,则可以使用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(.)))

或将变量名称存储在 vector 中并使用:
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/

10-12 18:28