Tox*_*Tox 2 r count missing-data dplyr
我有一个数据集,我想总结没有缺失值的观测数量(用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")
Run Code Online (Sandbox Code Playgroud)
我打算使用包dplyr,但这只需要考虑几年而不是不同的变量:
library(dplyr)
data %>%
group_by(Year) %>%
summarise(number = n())
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得以下结果?
2000 2001 2002
ExplanatoryVariable1 2 2 1
ExplanatoryVariable2 2 2 2
Run Code Online (Sandbox Code Playgroud)
要获得计数,您可以先使用:
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
Run Code Online (Sandbox Code Playgroud)
如果要像问题中所示重新整形,可以使用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
Run Code Online (Sandbox Code Playgroud)
只是让OP知道,因为他们有~200个解释变量可供选择.您可以使用另一个选项summarise_at来选择变量.您可以简单地命名第一个:last变量,如果它们在数据中正确排序,例如:
data %>%
group_by(Year) %>%
summarise_at(vars(ExplanatoryVariable1:ExplanatoryVariable2), ~sum(!is.na(.)))
Run Code Online (Sandbox Code Playgroud)
要么:
data %>%
group_by(Year) %>%
summarise_at(3:4, ~sum(!is.na(.)))
Run Code Online (Sandbox Code Playgroud)
或者将变量名称存储在向量中并使用:
vars <- names(data)[4:5]
data %>%
group_by(Year) %>%
summarise_at(vars, ~sum(!is.na(.)))
Run Code Online (Sandbox Code Playgroud)