[英]Comparing data.frames in R
我有2个数据框
> a1
v1 v2 v3
ABCA1 --> GIF
ACTA1 --| CSNK2A1
ACTN4 --| HDAC7
ACTN4 --> RARA
> a2
v1 v2 v3
ABCA1 --| GIF
ACTA1 --| CSNK2A1
ABCD2 --| HDAC7
ACTN4 --> XYZ1
我想要输出其中a1$v1 == a2$v1
&& a1$v3 == a2$v3
&& a1$v2 != a2$v2
。 因此,结果将是:
> a3
ABCA1 --> GIF
因为第1行满足所有这些条件。 在第2行中, condition 3
不满足。 在第3行中, condition 1
不满足,在第4行中, condition 2
不满足。
如果我们要比较“ a1”和“ a2”数据集中的“ v1”列,并使用&
而不是&&
,我们将获得预期的输出
a1[(a1$v1==a2$v1) & (a1$v3==a2$v3) & (a1$v2 != a2$v2), , drop=FALSE]
# v1 v2 v3
#1 ABCA1 --> GIF
根据?"&&"
的描述
'&'和'&&'表示逻辑AND和'|' 和'||' 表示逻辑或。 较短的形式以与算术运算符几乎相同的方式执行元素比较。 较长的形式从左到右求值,仅检查每个向量的第一个元素。
如果我们需要在“A1”来比较一行对所有的行,我们就可以paste
使用每个数据集的行do.call(paste,..
通过和循环lapply
上paste
“A1”的元素和比较反对paste
d'a2'或可以使用outer
来完成。
lapply(do.call(paste, a1), '==', do.call(paste, a2))
要么
outer(do.call(paste, a1), do.call(paste, a2), '==')
a1 <- structure(list(v1 = c("ABCA1", "ACTA1", "ACTN4", "ACTN4"),
v2 = c("-->",
"--|", "--|", "-->"), v3 = c("GIF", "CSNK2A1", "HDAC7", "RARA"
)), .Names = c("v1", "v2", "v3"), class = "data.frame",
row.names = c(NA, -4L))
a2 <- structure(list(v1 = c("ABCA1", "ACTA1", "ABCD2", "ACTN4"),
v2 = c("--|",
"--|", "--|", "-->"), v3 = c("GIF", "CSNK2A1", "HDAC7", "XYZ1"
)), .Names = c("v1", "v2", "v3"), class = "data.frame",
row.names = c(NA, -4L))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.