【发布时间】:2019-02-17 09:42:09
【问题描述】:
我正在处理一组 5 个 excel 列 A,B,C,D,E 的单词 "Aaa","Aab"...,我想在所有列中找到完全匹配的内容(在 R 中)。
A B C D E
Aaa Aaa Baa Aaa Ass
Aab Ccc Aaa Baa Aaa
Ccc Abc Ccc Ccc Ccc
... ... ... ... ...
我为每一列创建一个向量。
为此,我尝试了带有if 和grep 函数的for 循环。
<pre>
for(i in A_vector) {
if(grep("i", B_vector))
if(grep("i", C_vector))
if(grep("i", D_vector))
if(grep("i", E_vector))
print(i)
}
<code>
(但我只获得了第一个向量A_vector中的单词)。
最后,我希望有一个包含 5 列中匹配的单词 "Aaa", "Bbb"... 的向量。我不需要向量中每个匹配项的位置,只需要所有向量共有的单词。
Result
[1] "Aaa"
[2] "Ccc"
[n] ...
提前谢谢你!
【问题讨论】:
-
Hiho J L Carballo,欢迎来到 stackoverflow。我认为您可以通过一些直接的比较来存档。索引 = 其中(数据$A == 数据$B & 数据$A == 数据$C % 数据$A == 数据$D $ 数据$A == 数据$E)。这为您提供了所有列中包含相同字符串的每一行的索引。因此,使用 data[index] 您可以获得所有具有相同字符串的行。使用 data$A[index] 你会得到一个向量,其中所有字符串在所有列上都相等。
-
grep非常适合使用正则表达式匹配模式。对于精确匹配,请使用==或%in%,具体取决于您是否需要逐元素匹配。但是,对于寻找“共同元素”intersect可能是一个更好的选择。如果您的输入是名为dd的数据框,我认为您正在寻找Reduce(inntersect, dd)