#r
#r
Вопрос:
Я пытаюсь заменить все символьные значения, которые не равны «A» или «B», на «»
df$var <- as.character(df$var)
df$var[df$var != "A" | "B"] <- c("")
Я уверен, что для этого есть простое решение… однако мой новичок показывает, и я не могу найти раздел справки (здесь или иначе).
Любая помощь?
Комментарии:
1. Я не буду публиковать это как ответ, потому что это слишком похоже на другой ответ, но вы были почти там. Всегда лучше работать с частью данных, чем со всеми, поэтому вы можете сделать либо:
df$var[!df$var %in% c("A", "B")] <- ""
, либо (как в комментарии @nrussells)df$var[df$var != "A" amp; df$var != "B"] <- ""
Ответ №1:
df$var <- ifelse(!(df$var %in% c("A","B")), "", df$var)
Комментарии:
1. Потому что
df$var[df$var != "A" | "B"]
это недопустимая команда R. Это должно было бы бытьdf$var[df$var != "A" amp; df$var != "B"]
. Или один из многих других способов добиться этого в R; ноdf$var != "A" | "B"
не является законным.2. Конечно, это не так, но лучше оперировать частью вектора, чем всем им. Ваш пример намного лучше, чем ответ
3. Спасибо, ребята, — все еще понимаю нюансы того, что является «законным», а не в R. Хорошие примеры от вас обоих.
Ответ №2:
Альтернативой является использование gsub
:
x <- unlist(strsplit('ABCDEABCDE', '')) # example vector
gsub('[^AB]', '', x)
# [1] "A" "B" "" "" "" "A" "B" "" "" ""