Пример данных:
data = data.frame(VAL=c('24','24','24',NA,NA))
Давайте сначала посмотрим на
data$VAL=="24"
, который возвращает
[1] TRUE TRUE TRUE NA NA
Итак, когда вы делаете
data$VAL[data$VAL=="24"]
Мы говорим R включить из data$VAL
все элементы, где data$VAL=="24"
равно TRUE
, и пропустить те, где оно FALSE
(попробуйте, например, c(1,2,3)[c(TRUE,FALSE,TRUE)]
). Для четвертого и пятого элемента вы указываете не TRUE
или FALSE
для включения элемента, а NA
и NA
. Итак, вы получите
[1] 24 24 24 <NA> <NA>
который действительно имеет длину 5
. Когда вы делаете
data$VAL[!is.na(data$VAL) & data$VAL=="24"]
вы указываете, что не хотите брать элементы, которые NA
, и, следовательно, длина составляет 3
.
Если мы сделаем один шаг назад, мы увидим, что мы хотим посчитать количество TRUE
в data$VAL=="24"
. Мы также можем сделать это, например:
sum(data$VAL=="24",na.rm=TRUE)
, который возвращает 3
, поскольку аргумент na.rm
указывает, что мы хотим удалить NA
из вектора перед суммированием. Надеюсь, это поможет!