Я застрял, пытаясь сделать что-то, что должно быть простым: Используйте grep()
, чтобы проверить соответствие шаблона в строке для нескольких переменных в одном кадре данных. Все поиски этого приводят меня к инструкциям о том, как grep()
на нескольких образцах.
Создать данные:
df <- data.frame(a = c("apple", "plum", "pair", "apple"),
b = c(1, 2, 3, 4),
c = c("plum", "apple", "grape", "orange"))
df
a b c
1 apple 1 plum
2 plum 2 apple
3 pair 3 grape
4 apple 4 orange
Теперь я хочу проверить df$a
и df$c
для строки "apple". Я хочу сделать это, потому что я хочу значения от df$b
для всех строк с «яблоком» в df$a
или df$c
.
Я надеялся создать функцию: f(x)::grep("apple", df$x)
и использовать lapply для проверки ее по списку имен переменных, которые я хочу проверить для шаблона:
check_apple <- function(x) {
grep("apple", df$x)
}
Но это не работает:
check_apple(a)
integer(0)
Однако это работает:
grep("apple", df$a)
[1] 1 4
Почему эта функция не работает? Могу ли я не использовать имя переменной в качестве аргумента в моей функции?
Мой план состоял в том, чтобы применить функцию ко всем переменным, и они свернули результирующий список в один вектор, прежде чем выбирать значения unique()
, чтобы получить все строки в кадре данных, в которых есть переменные с совпадением строк. Само собой разумеется, что мой набор данных намного больше, чем этот пример.
Могу ли я исправить функцию или есть другой способ запустить grep()
для нескольких переменных?