簡體   English   中英

比較R中的data.frames

[英]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,..通過和循環lapplypaste “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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM