我用过的项目中没有NA值用于通过基本的R索引对这些data.frame进行子集化,但在我的结果中几乎有一半变为NA。尺寸是一致的,我检查了匹配的每一部分,以确保它是孤立的。
对数据进行采样,以便我可以使用dput()
不可行,因为它会破坏匹配,因此我将.RDS数据上传到GitHub:
https://github.com/hack-r/stackoverflow_NA_question
要从GitHub下载文件,您可以克隆回购或单击该文件,然后单击"下载"按钮。要克隆仓库类型git clone https://github.com/hack-r/stackoverflow_NA_question.git
。
model_data <- readRDS("model_data.RDS")
StartDates.next3.prev <- readRDS("startDates.next3.prev.RDS")
pred <- readRDS("pred.RDS")
table(is.na(pred))
# FALSE
# 156930
table(is.na(model_data$flag_prev))
# FALSE
# 52716
nrow(pred) == length(model_data$flag_prev[model_data$flag_prev=="Y"])
# [1] TRUE
StartDates.next3.prev$Start_Date[1]
# [1] "2016-01-04"
table(model_data$matched_start_date[model_data$flag_prev=="Y"]==startDates.next3.prev$Start_Date[1])
# FALSE TRUE
# 21872 9514
tmp <- pred$Enroll.in.term.1[model_data$flag_prev == "Y" &
model_data$matched_start_date ==
StartDates.next3.prev$Start_Date[1]]
table(is.na(tmp)) # Why are 4,130 NA??
# FALSE TRUE
# 5384 4130
应该有9,514个结果,但是它们都应该是非NA。
答案 0 :(得分:1)
length(pred$Enroll.in.term.1)
# 31386
x <- model_data$flag_prev == "Y"
y <- model_data$matched_start_date == StartDates.next3.prev$Start_Date[1]
sum(which((x & y) == T) > 31386)
# 4130
问题是model_data
的行数多于pred
。因此,您用于子集的逻辑向量比pred
长得多。因此,将有4130个NAs。