比较R中data.frames的元素 [英] Comparing elements of data.frames in R
问题描述
我有2个数据框
> a1
v1 v2 v3
ABCA1 - > GIF
ACTA1 - | CSNK2A1
ACTN4 - | HDAC7
ACTN4 - > RARA
> a2
v1 v2 v3
ACTA1 - | CSNK2A1
ABCD2 - | HDAC7
ABCA1 - | GIF
ACTN4 - >我想要输出,其中 a1 $ element1 == a2 $ element1
$ p $ code>& a1 $ element3 == a2 $ element3
& a1 $ element2!= a2 $ element2
。所以,结果将是: > a3
ABCA1 - > GIF
由于此行中的所有元素都符合我们所有3个条件。在 a1
中的行1和 a2
中的行3。你可以看到( a1
和第3行 a2
) ABCA1 == ABCA1
& - > != - |
& GIF == GIF
解决方案您可以尝试合并
:
m2< - merge(a1,a2,by = c ,v3))
m2 [m2 [,3]!= m2 [,4],] [c(1,3,2)]
#v1 v2.x v3
#1 ABCA1 - > GIF
我们首先在列1和3上合并。这将连接前两个条件的情况。对于最后一个条件,测试列符号不同的情况。
另外, stringsAsFactors
应设置为
使用 data.table
,您可以使用其浅复制效率进行合并。
setDT(a1)[a2,on = c(v1,v3)] [v2!= i。 v2]
v1 v2 v3 i.v2
1:ABCA1 - > GIF - |
I have 2 data frames
> a1
v1 v2 v3
ABCA1 --> GIF
ACTA1 --| CSNK2A1
ACTN4 --| HDAC7
ACTN4 --> RARA
> a2
v1 v2 v3
ACTA1 --| CSNK2A1
ABCD2 --| HDAC7
ABCA1 --| GIF
ACTN4 --> XYZ1
I want output where a1$element1 == a2$element1
& a1$element3 == a2$element3
& a1$element2 != a2$element2
. So, the outcome will be:
> a3
ABCA1 --> GIF
As all elements in this row fulfills our all 3 conditions. It is row 1 in a1
and row 3 in a2
. As you can see (row 1 of a1
and row 3 of a2
) ABCA1 == ABCA1
& --> != --|
& GIF == GIF
解决方案 You can try merge
:
m2 <- merge(a1, a2, by=c("v1", "v3"))
m2[m2[,3] != m2[,4],][c(1,3,2)]
# v1 v2.x v3
#1 ABCA1 --> GIF
We first merge on columns 1 and 3. That will connect the cases of the first two conditions. For the last condition, test for the cases where the column symbols are different.
Also stringsAsFactors
should be set to FALSE when creating the data frames.
With data.table
, you can merge using its shallow copying efficiency.
setDT(a1)[a2, on = c("v1", "v3")][v2 != i.v2]
v1 v2 v3 i.v2
1: ABCA1 --> GIF --|
这篇关于比较R中data.frames的元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!