【问题标题】:Comparing 3 column lists in R比较 R 中的 3 列列表
【发布时间】:2015-03-15 04:34:59
【问题描述】:
我正在寻找 R 中可以比较三列矩阵的循环。我想要循环做的是采用两个格式的矩阵/数据帧
A:
X Y Z
3 4 5
3 5 6
4 5 7
和
B:
X Y Z
3 4 5
3 4 4
3 4 7
4 5 7
如果所有 3 列都完全匹配,则遍历每个返回行。
这会返回
X Y Z
3 4 5
4 5 7
理想情况下,代码可以应用于更长的矩阵/数据帧。
【问题讨论】:
标签:
r
list
loops
matrix
dataframe
【解决方案1】:
如果您的数据很大,您可以使用data.table 包:
library(data.table); setDT(A); setDT(B)
setkey(B)[A,nomatch=0]
# X Y Z
#1: 3 4 5
#2: 4 5 7
setkey(A)[B,nomatch=0] 返回相同的输出,因为它是一个交集。
【解决方案2】:
如果“A”、“B”是“data.frames”,您可以从dplyr 尝试intersect
library(dplyr)
intersect(A,B)
或者
inner_join(A,B)
【解决方案3】:
base R 中的一个选项是merge:
merge(A,B, by = c("X", "Y", "Z"))
# X Y Z
#1 3 4 5
#2 4 5 7
这种方法与矩阵和 data.frames 的工作方式相同。
事实上,在这种情况下,您甚至可以省略“by”参数的说明:
merge(A,B)
# X Y Z
#1 3 4 5
#2 4 5 7