Как использовать Gsub в R для сортировки возрастов - PullRequest
1 голос
/ 09 июля 2020

У меня есть вектор возрастов, и я хочу использовать gsub для сортировки возрастов младше 21 года. Я хотел бы добавить «нет» для всех возрастов младше 21 года.

ages <- c(3,45,12,28,14,19,40,22)
gsub(ages < 21,"no" , ages)

Я получаю ошибка «аргумент 'шаблон' имеет длину> 1 и будет использован только первый элемент». Я новичок в R и пытаюсь понять эти команды.

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Это может быть не очень полезно, потому что он не использует функцию gsub, но вы можете использовать следующий код для того, что ищете:

ifelse(ages < 21, "no", ages)
0 голосов
/ 10 июля 2020

Ошибка на самом деле является предупреждением и проистекает из того факта, что 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...