Разбейте вашу проблему на более мелкие шаги, чтобы понять, что происходит -
#1)
df[,c(2:3)] >= 0
# age income
#[1,] TRUE TRUE
#[2,] FALSE TRUE
#[3,] TRUE TRUE
#[4,] TRUE TRUE
#2)
df[,(2:3)] <= 100
# age income
#[1,] TRUE TRUE
#[2,] TRUE TRUE
#[3,] TRUE FALSE
#[4,] TRUE TRUE
#3)
df[,c(2:3)] >= 0 & df[,(2:3)] <= 100
# age income
#[1,] TRUE TRUE
#[2,] FALSE TRUE
#[3,] TRUE FALSE
#[4,] TRUE TRUE
Выход 3) - это матрица, и теперь R пытается поднастроить строки, где присутствует TRUE
, то есть номера строк
which(df[,c(2:3)] >= 0 & df[,(2:3)] <= 100)
#[1] 1 3 4 5 6 8
, но у вас есть только 4 строки в наборе данных, поэтому R добавляет все остальные строки с числом больше 4 с NA
df[c(1, 3, 4, 5, 6, 8), ]
# name age income
#1 alicia 40 100
#3 john 30 120
#4 jessie 28 60
#NA <NA> NA NA
#NA.1 <NA> NA NA
#NA.2 <NA> NA NA