R — как условно заменить символьные строки на отсутствующие

#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" ""  ""  ""