为什么在子集 data.frame 时创建 NA 的尺寸是一致的,而没有 NA?

Why are NA's being created when subsetting data.frame's with conformable dimensions and no NA's?

提问人:Hack-R 提问时间:12/6/2016 更新时间:12/7/2016 访问量:43

问:

我用来通过基本 R 索引对这些 data.frame 进行子集的项目中没有 NA 值,但在我的结果中几乎有一半变成了 NA。尺寸是合格的,我检查了匹配的每一块,以确保它单独工作。

对数据进行采样以便我可以使用是不可行的,因为它破坏了匹配,因此我上传了 .RDS 数据到 GitHub:dput()

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。

r

评论

0赞 G5W 12/6/2016
您进行了测试,因此捕食者不是 NA,但您没有测试您正在使用的东西.你从中得到什么?table(is.na(pred))pred$Enroll.in.term.1table(is.na(pred$Enroll.in.term.1))
0赞 Hack-R 12/6/2016
@G5WFALSE 31386
0赞 Hack-R 12/6/2016
更新:我找到了解决方法,但仍然想了解问题。解决方法是首先像这样子集:然后仅使用第二个条件将其子集,就像问题中一样。对我来说毫无意义。model_datamodel_data <- model_data[model_data$flag_prev == "Y",]

答:

1赞 mt1022 12/7/2016 #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

问题是 的行数比 .因此,您用于子集的逻辑向量比 长得多。因此,将恰好有 4130 个 NA。model_datapredpred