比较 R 中的 3 个列列表
Comparing 3 column lists in R
我正在寻找 R 中可以比较三列矩阵的循环。我想要循环做的是采用格式
的两个 matrices/dataframes
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 列都完全匹配,则 return 遍历每一行。
这会 return
X Y Z
3 4 5
4 5 7
理想情况下,代码可以应用于更长的 matrices/data 帧。
如果 "A"、"B" 是 "data.frames"
,您可以从 dplyr
尝试 intersect
library(dplyr)
intersect(A,B)
或者
inner_join(A,B)
基数 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
如果你的数据很大你可以使用data.table
package:
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]
returns 相同的输出,因为它是一个交叉点。
我正在寻找 R 中可以比较三列矩阵的循环。我想要循环做的是采用格式
的两个 matrices/dataframes 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 列都完全匹配,则 return 遍历每一行。
这会 return
X Y Z
3 4 5
4 5 7
理想情况下,代码可以应用于更长的 matrices/data 帧。
如果 "A"、"B" 是 "data.frames"
,您可以从dplyr
尝试 intersect
library(dplyr)
intersect(A,B)
或者
inner_join(A,B)
基数 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
如果你的数据很大你可以使用data.table
package:
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]
returns 相同的输出,因为它是一个交叉点。