获取 k 的任何元素与 R 中 x[i] 中的模式匹配的索引
Get the indices for which any element of k matches a pattern in x[i] in R
我正在寻找 R 代码,该代码将数据帧 a 的子集用于匹配另一个向量 k 中的模式的索引。
例如,
考虑
x <- c("a", "b", "c")
y <- 1:3
z <- c("foo", "bar", "null")
a <- data.frame(x, y, z)
a
# x y z
#1 a 1 foo
#2 b 2 bar
#3 c 3 null
假设我有一个要用于子集 a 的列表,其中 k 定义为
k <- c("b", "c")
如果我将 grepl
与 apply
和 sapply
一起使用,我可以获得与 k 匹配的行,这正是我想要的。
a[as.logical(apply(sapply(k, grepl, a$x), 1, sum)),]
x y z
2 b 2 bar
3 c 3 null
但是,当扩展到大型数据集时,这段代码 真的 很慢。有没有更快更简单的方法来做到这一点?
谢谢,
拉斐尔
编辑:我尽力在 Stack Overflow 上找到这个问题的答案。由于找不到它,我可以保证此 post 中使用的措辞是独一无二的,因此是对论坛的贡献。
在 base R 中一个简单的方法是使用 %in%
:
a[ a$x %in% k , ]
我正在寻找 R 代码,该代码将数据帧 a 的子集用于匹配另一个向量 k 中的模式的索引。
例如, 考虑
x <- c("a", "b", "c")
y <- 1:3
z <- c("foo", "bar", "null")
a <- data.frame(x, y, z)
a
# x y z
#1 a 1 foo
#2 b 2 bar
#3 c 3 null
假设我有一个要用于子集 a 的列表,其中 k 定义为
k <- c("b", "c")
如果我将 grepl
与 apply
和 sapply
一起使用,我可以获得与 k 匹配的行,这正是我想要的。
a[as.logical(apply(sapply(k, grepl, a$x), 1, sum)),]
x y z
2 b 2 bar
3 c 3 null
但是,当扩展到大型数据集时,这段代码 真的 很慢。有没有更快更简单的方法来做到这一点?
谢谢,
拉斐尔
编辑:我尽力在 Stack Overflow 上找到这个问题的答案。由于找不到它,我可以保证此 post 中使用的措辞是独一无二的,因此是对论坛的贡献。
在 base R 中一个简单的方法是使用 %in%
:
a[ a$x %in% k , ]