3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
這不會(huì)直接回答您的問(wèn)題,但它會(huì)為您提供共同的元素。這可以通過(guò)Paul Murrell的包來(lái)完成compare:
library(compare)
a1 <- data.frame(a = 1:5, b = letters[1:5])
a2 <- data.frame(a = 1:3, b = letters[1:3])
comparison <- compare(a1,a2,allowAll=TRUE)
comparison$tM
# a b
#1 1 a
#2 2 b
#3 3 c
該函數(shù)compare在允許哪種比較方面為您提供了很大的靈活性(例如,改變每個(gè)向量的元素順序,改變變量的順序和名稱,縮短變量,改變字符串的大小寫(xiě))。由此,您應(yīng)該能夠找出其中一個(gè)或哪個(gè)缺失的東西。例如(這不是很優(yōu)雅):
difference <-
data.frame(lapply(1:ncol(a1),function(i)setdiff(a1[,i],comparison$tM[,i])))
colnames(difference) <- colnames(a1)
difference
# a b
#1 4 d
#2 5 e

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
SQLDF 提供了一個(gè)很好的解決
a1 <- data.frame(a = 1:5, b=letters[1:5])
a2 <- data.frame(a = 1:3, b=letters[1:3])
require(sqldf)
a1NotIna2 <- sqldf('SELECT * FROM a1 EXCEPT SELECT * FROM a2')
以及兩個(gè)數(shù)據(jù)框中的行:
a1Ina2 <- sqldf('SELECT * FROM a1 INTERSECT SELECT * FROM a2')
新版本dplyr有一個(gè)功能,anti_join正是為了這些類型的比較
require(dplyr)
anti_join(a1,a2)
而semi_join過(guò)濾行的a1,同時(shí)也是在a2
semi_join(a1,a2)
- 3 回答
- 0 關(guān)注
- 799 瀏覽
添加回答
舉報(bào)