2017-08-31 80 views
2

我對R無法識別我的數據集中的NA的事實感到困惑daily。的daily快速檢查可能會導致人們相信,沒有NA的可變OBLIGOR_IDR無法識別我的數據集中的NA NA

class(daily) 
# "data.frame" 

table(is.na(daily$OBLIGOR_ID)) 
# FALSE 
# 207775 

但是,如果一個繪製OBLIGOR_ID的所有這些意見,其ADJUSTED_ORR是62512,人們會發現,

daily[daily$ADJUSTED_ORR==62512,c('OBLIGOR_ID')] 

# [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
# [60] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
# [119] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
# [178] NA NA NA NA NA NA NA 

is.na(daily[daily$ADJUSTED_ORR==62512,c('OBLIGOR_ID')]) 

# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
# [36] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
# [71] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
# [106] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
# [141] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
# [176] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

有什麼建議嗎?

+3

你可以試試'is.na(每日[其中(DAT $ ADJUSTED_ORR == 62512),」 OBLIGOR_ID'])' – Wen

+0

返回「邏輯(0)」 –

+0

請檢查我的答案.. – Wen

回答

2

樣本數據

PIN <- c("case1", "case2", "case3", "case4", "case5") 
STAMP_1 <- c(1, 1, 1, 1, 1) 
STAMP_2 <- c(NA, 1, 1, NA, 1) 
STAMP_3 <- c(1, NA, 1, 1, NA) 
STAMP_4 <- c(NA, NA, 1, 1, NA) 
STAMP_5 <- c(1, NA, NA, 1, NA) 
dat <- data.frame(PIN, STAMP_1, STAMP_2, STAMP_3, STAMP_4, STAMP_5) 
dat 
    PIN STAMP_1 STAMP_2 STAMP_3 STAMP_4 STAMP_5 
1 case1  1  NA  1  NA  1 
2 case2  1  1  NA  NA  NA 
3 case3  1  1  1  1  NA 
4 case4  1  NA  1  1  1 
5 case5  1  1  NA  NA  NA 

在你的情況下,例如:

dat[dat$STAMP_2==1,'STAMP_3'] 
[1] NA NA 1 NA NA 

正確的過濾方式當有NA

基礎R

dat[which(dat$STAMP_2==1),'STAMP_3'] 
    [1] NA 1 NA 

subset(dat, STAMP_2 ==1, select=c('STAMP_3'))

STAMP_3 
2  NA 
3  1 
5  NA 
0

這是最可能的原因是ADJUSTED_ORR包含NA值,你可以試試下面

df <- data.frame(a = NA, b = 1:100) 
df[df$a==1,]