2014-06-29 28 views
5

Ai đó có thể giải thích tại sao tôi nhận được các câu trả lời khác nhau bằng cách sử dụng hàm tổng hợp để đếm các giá trị bị thiếu theo nhóm? Ngoài ra, có cách nào tốt hơn để đếm các giá trị bị thiếu theo nhóm bằng cách sử dụng hàm R gốc không?R đếm NA theo nhóm

DF <- data.frame(YEAR=c(2000,2000,2000,2001,2001,2001,2001,2002,2002,2002), X=c(1,NA,3,NA,NA,NA,7,8,9,10)) 
DF 

aggregate(X ~ YEAR, data=DF, function(x) { sum(is.na(x)) }) 
with(DF, aggregate(X, list(YEAR), function(x) { sum(is.na(x)) })) 

aggregate(X ~ YEAR, data=DF, function(x) { sum(! is.na(x)) }) 
with(DF, aggregate(X, list(YEAR), function(x) { sum(! is.na(x)) })) 

Trả lời

10

Các trang trợ giúp tại ?aggregate chỉ ra rằng phương pháp công thức có một cuộc tranh cãi na.action mà được thiết lập theo mặc định để na.omit.

na.action: một chức năng mà chỉ những gì sẽ xảy ra khi các dữ liệu chứa NA giá trị. Mặc định là bỏ qua các giá trị bị thiếu trong các biến đã cho.

Change rằng lý lẽ để NULL hoặc na.pass thay vì để có được những kết quả mà bạn có lẽ mong đợi:

# aggregate(X ~ YEAR, data=DF, function(x) {sum(is.na(x))}, na.action = na.pass) 
aggregate(X ~ YEAR, data=DF, function(x) {sum(is.na(x))}, na.action = NULL) 
# YEAR X 
# 1 2000 1 
# 2 2001 3 
# 3 2002 0 
-1
library(dplyr) 
library(tidyr) 

#say you want to get missing values from group 1 
dataframe %>% filter(group = 1 & is.na(another_column)) 

#missing values from group 2 
dataframe %>% filter(group = 2 & is.na(another_column)) 
Các vấn đề liên quan