【发布时间】:2019-10-28 04:55:29
【问题描述】:
我正在尝试使用 which 函数在我的数据框中查找多个字符串。我正在尝试从Find string in data.frame扩展答案
一个示例数据框是:
df1 <- data.frame(animal=c('a','b','c','two', 'five', 'c'), level=c('five','one','three',30,'horse', 'five'), length=c(10, 20, 30, 'horse', 'eight', 'c'))
1 a five 10
2 b one 20
3 c three 30
4 two 30 horse
5 five horse eight
6 c five c
当我对一个字符串应用 which 函数时,在这个数据帧上,我得到了正确的输出,例如
which(df1 =="c" , arr.ind = T);df1
给出:
row col
[1,] 3 1
[2,] 6 1
[3,] 6 3
但是当我尝试搜索多个字符串时,我只能得到部分正确的输出,例如
which(df1 ==c("c", "horse", "five") , arr.ind = T)
row col
[1,] 5 2
[2,] 6 2
预期的输出应该是:
row col
[1,] 3 1
[2,] 5 1
[3,] 6 1
[4,] 1 2
[5,] 5 2
[6,] 6 2
[7,] 4 3
[8,] 6 3
因此我的问题是:
为什么使用 c("c", "horse", "five") 的解决方案不起作用?
我已经尝试过
which(df1=="c" | df1=="horse" | df1 =="five", arr.ind = T)
这给了我正确的输出,但是对于许多字符串来说太长了, 如何让我的代码简洁?
【问题讨论】:
-
你也可以这样做:
purrr::map(df1,function(x) which(x%in%c("c", "horse", "five") , arr.ind = T)) -
@NelsonGon 正准备用它进行编辑。您可以使用
sapply、which(sapply(df1, function(x) x %in% vals), arr.ind = TRUE)