3 回答

TA貢獻1828條經驗 獲得超4個贊
這不會直接回答您的問題,但它會為您提供共同的元素。這可以通過Paul Murrell的包來完成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
該函數compare在允許哪種比較方面為您提供了很大的靈活性(例如,改變每個向量的元素順序,改變變量的順序和名稱,縮短變量,改變字符串的大小寫)。由此,您應該能夠找出其中一個或哪個缺失的東西。例如(這不是很優雅):
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貢獻1830條經驗 獲得超3個贊
SQLDF 提供了一個很好的解決
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')
以及兩個數據框中的行:
a1Ina2 <- sqldf('SELECT * FROM a1 INTERSECT SELECT * FROM a2')
新版本dplyr有一個功能,anti_join正是為了這些類型的比較
require(dplyr)
anti_join(a1,a2)
而semi_join過濾行的a1,同時也是在a2
semi_join(a1,a2)
- 3 回答
- 0 關注
- 785 瀏覽
添加回答
舉報