【发布时间】:2019-05-22 19:43:37
【问题描述】:
我一直在尝试做一些应该很简单的事情:使用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 中所有带有“apple”的行在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()?
【问题讨论】:
-
在您的函数中:
grep("apple", df[,x])其中x是一个字符(即"a")。