R:grepl输出匹配顺序错误

时间:2019-05-07 17:05:21

标签: r string grepl

我有一个带有1个变量和5,000行的数据帧(称为测试),其中每个元素都是一个字符串。

1. "Am open about my feelings."                   
2. "Take charge."                                 
3. "Talk to a lot of different people at parties."
4. "Make friends easily."                         
5. "Never at a loss for words."                   
6. "Don't talk a lot."                            
7. "Keep in the background."                      
  .....
5000. "Speak softly."           

我正在寻找并输出3个特定字符元素的行位置。在这种情况下,df对象:“轻声说话。”,“负责”,“不要多说话”。

我希望得到以下输出;

[1] 5000 2 6 

但是,由于某种原因,我当前正在使用的代码以升序输出行索引,而不是按照与上述项目相对应的顺序来排序行索引

which(grepl(paste(df, collapse = "|"), test[,1])) 

[1] 2 6 5000 

我真的不确定为什么会这样。我尝试将基于grepl的选项设置为FIXED或PERL设置为TRUE,以希望它可以改变结果,但事实并非如此。我也尝试搜索通用的“重新排序”功能,但这与此处所需的功能截然不同。最后,我尝试删除了which语句,但是它只是将输出更改为二进制并产生TRUE,FALSE类型的输出。

编辑

感谢大家在解决方案方面的帮助。

lapply(big7 , function(p) {
grep(pattern = p, test[ , 1])} ) # correct order of indices  

lapply(big7 , function(p) {
grepl(pattern = p, test[ , 1])} ) #  TRUE/FALSE for each item in the correct order 

1 个答案:

答案 0 :(得分:3)

尝试一下(由于我在上面的评论中的原因(并且因为grep返回数字位置):

  sapply( df , function(p) {grep(patt=p, test[ , 1])} )