我有一个带有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
答案 0 :(得分:3)
尝试一下(由于我在上面的评论中的原因(并且因为grep返回数字位置):
sapply( df , function(p) {grep(patt=p, test[ , 1])} )