【发布时间】:2019-05-04 21:57:35
【问题描述】:
我有一个包含 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 个特定元素的行号。 目前,我使用以下内容:
grep("Take charge." , df[,1])
grep("Make friends easily.", df[,1])
grep("Make friends easily.", df[,1])
并得到以下输出: [1] 2 [2] 4 [3] 5000
问题 1. 有没有办法让语法更简洁,所以我不必在每一行都使用 grep 和 df[,1]?
问题 2. 如果是这样,如何输出所需行位置的单个数值数组,结果看起来像这样?
2, 4, 5000
到目前为止我尝试了什么。
grep("负责。" , "轻松交朋友。","轻松交朋友。",
df[,1]) # 这没用
我尝试创建一个名为 m1 的向量,它包含所有三个元素,然后 grep(m1, df[,1]) # 这也不起作用
【问题讨论】:
-
基本上是grep using a character vector with multiple patterns 或this 的副本(用
grepl代替regexpr)。 -
以防万一答案不清楚,您可以选择
patterns = c("Take charge.", "Make friends easily."),一个简单的方法是which(grepl(paste(patterns, collapse = "|"), df[,1]))。这是标准正则表达式,其中.匹配任何单个字符 --- 如果您想匹配文字"."在您的模式中转义它,例如"Take charge\\."。 -
但是 Gabor 在他的回答中有一个很好的观点——如果这些是完整的、完全匹配的,那么非正则表达式的解决方案会更简单、更有效。
-
我尝试了这两种解决方案,出于某种原因,您的解决方案运行良好,但 Gabor 没有,也许我做错了什么。无论如何,感谢您的意见!非常感谢!