Сопоставить вектор символов в кадре данных с другим вектором символов и символом усечения
Вот датафрейм и вектор.
df1 <- tibble(var1 = c("abcd", "efgh", "ijkl", "qrst"))
vec <- c("abcd", "mnop", "ijkl")
Теперь для всех значений в var1, которые совпадают со значениями в vec, оставьте только первые 3 символа в var1, так что требуемое решение:
df2 <- tibble(var1 = c("abc", "efgh", "ijk", "qrst"))
Поскольку "abcd" соответствует, мы сохраняем только 3 символа, то есть "abc" в df2, но "efgh" не существует в vec, поэтому мы сохраняем его как есть, то есть "efgh" в df2.
Как я могу использовать dplyr и / или stringr для этого?
1 ответ
Решение
Вы можете просто использовать %in%
проверить, находятся ли строки в векторе, и substr
обрезать вектор:
df1 %>%
mutate(var1 = ifelse(var1 %in% vec, substr(var1, 1, 3), var1))
# A tibble: 4 x 1
# var1
# <chr>
#1 abc
#2 efgh
#3 ijk
#4 qrst