2013-06-05 208 views
2

假設我有兩個數據幀(DF1 & DF2)並且都包含(x,y)座標。我想提取一對DF1中的(x,y),但不是DF2。例如:減去兩個數據幀

DF1<-data.frame(x=1:3,y=4:6,t=10:12) 
DF2<-data.frame(x=3:5,y=6:8,s=1:3) 

我想

DF_new<-data.frame(x=1:2,y=4:5,t=10:11). 

我應該爲更大的數據集呢?謝謝!

+1

要清楚,你想找到(x,y)對在BOTH數據框中,但具有不匹配的t值? – alexwhan

+0

哦!我對預期的輸出錯誤!我對此非常抱歉。我已經更新了這個問題。我想找到其中(x,y)在DF1中的(x,y,t),但不是DF2 – Cathy

+0

OH,我猜@agstudy回答了我的問題。謝謝你的幫助!! – Cathy

回答

3

對於非常大的數據集,您可以在data.table感興趣:

library(data.table) 
DF1<-data.frame(x=1:3,y=4:6,t=10:12) 
DF2<-data.frame(x=3:5,y=6:8,s=1:3) 
library(data.table) 
DF1 <- data.table(DF1, key = c("x", "y")) 
DF2 <- data.table(DF2, key = c("x", "y")) 
DF1[complete.cases(DF1[DF2])] # maybe you want this? 
DF2[DF1] 
DF1[!DF2] # or maybe you want this? 
DF2[!DF1] 
+0

謝謝!有用!這是否意味着如果我想要比較多個列值(如果我只比較一個變量而不是一對變量),那麼我必須設置「關鍵字」(%中的coz%將起作用)? – Cathy

+0

簡答:是的。很長的回答:1)速度要快得多(如果時間是一個問題)2)除非你能想出更多「優雅」的方式來用%3來執行此操作),這使得你可以對數據執行各種精彩的操作按照[data.table文件介紹](http://datatable.r-forge.r-project.org/datatable-intro.pdf)中所述進行設置並附帶示例。 –

4

好像使用merge是一個很好的候選位置:

merge(DF1,DF2) 
    x y t s 
1 3 6 12 1 
+0

我在發帖時犯了錯誤,謝謝! – Cathy

1
library(tidyverse) 
DF1<-data.frame(x=1:3,y=4:6,t=10:12) 
DF2<-data.frame(x=3:5,y=6:8,s=1:3) 

anti_join(DF1, DF2) 
#> Joining, by = c("x", "y") 
#> x y t 
#> 1 1 4 10 
#> 2 2 5 11