Основное правило, как описано в Advanced-R:
Отсутствующее значение в индексе всегда приводит к отсутствующему значению в выходных данных:
x <- c(2.1, 4.2, 3.3, 5.4)
x[c(TRUE, TRUE, NA, FALSE)]
## [1] 2.1 4.2 NA
Егодовольно легко понять логику в контексте data.frame
с множеством примеров.Теоретически сложно объяснить четко.Взгляните на следующие примеры и посмотрите на правило, описанное в конце:
d[c(NA, NA, NA, NA), ]
# group x y
# NA <NA> NA NA
# NA.1 <NA> NA NA
# NA.2 <NA> NA NA
# NA.3 <NA> NA NA
d$x>5
#[1] NA NA TRUE FALSE
d[c(TRUE, FALSE, FALSE, NA), ]
# group x y
# 1 NA NA 1
# NA <NA> NA NA
#And Finally:
d[c(NA, NA, TRUE, FALSE), ] # matches with d[d$x>5,]
# group x y
# NA <NA> NA NA
# NA.1 <NA> NA NA
# 3 a 9 3
Теперь можно понять поведение TRUE/FALSE/NA
при выборе индекса строки:
TRUE -- Row is selected
FALSE -- Row is not selected
NA -- Row is selected in indeterminate stage. Meaning all columns will have NA
Пример данных: ( Как указано в OP )
d =data.frame(group=c("NA","NA","a","b"),x = c(NA,NA,9,5),y = c(1,2,3,4))