Ошибка на самом деле является предупреждением и проистекает из того факта, что gsub
не векторизуется и требует единственного аргумента (length 1
), в котором вы передаете ему вектор TRUE/FALSE
из length(ages)
. Вы также вводите gsub
с условием, хотя ему нужен шаблон, который он должен заменить. Итак, если вы хотите заменить, например, 19
на "no"
, вы хотите сделать gsub("^19$", "no", ages)
. ^
, $
по краям необходимы для обозначения начала и конца строки, в противном случае он также заменит, например, 119
.
Теперь, поскольку у вас много возможных возрастов до 21 года, вы необходимо определить все эти возможности, разделенные |
для «или»: ^1$|^2$|^3$|...
. Функция paste
вам поможет.
Итак, если вы зависимы от gsub
, вы можете сделать:
ages <- gsub(paste0("^", 1:20, "$", collapse="|"), "no", ages)
# [1] "no" "45" "no" "28" "no" "no" "40" "22"
Если ages
имеет десятичные знаки, замените 1:20
на что-то вроде seq(1, 20, .1)
в зависимости от десятичных знаков.
Шаблоны, такие как "^1$"
, называются регулярными выражениями , вы можете узнать о них больше, набрав ?regex
в консоли R.
Однако, наверное, сделать проще:
ages[ages < 21] <- "no"