2014-02-19 54 views
1

我在網上搜索了一下,找不到解決方案。查找2個數據框中的常見行

我有(不同長度)兩大dataframes:

dataSC_SC_combos

SURVEY_DATE DATA_COLLECTION_SITE 
2012-07-01 Site 1 
2012-07-01 Site 2 
2012-08-10 Site 2 
2012-08-10 Site 3 
2012-08-11 Site 2 
2012-09-20 Site 1 

dataSC_FSITE_combos

SURVEY_DATE FISHING_SITE 
2012-07-01 Site 1 
2012-07-01 Site 3 
2012-08-10 Site 2 
2012-08-11 Site 1 
2012-08-11 Site 1 
2012-09-20 Site 1 
2012-09-26 Site 1 
2012-09-27 Site 1 
2012-10-14 Site 1 

我想找到的數據和現場的唯一組合從這些, aka。

2012-07-01 Site 1 
2012-08-10 Site 2 
2012-09-20 Site 1 

,然後從這些唯一組合的較大的數據集子集用於任一SURVEY_DATE & FISHING_SITE或SURVEY_DATE & DATA_COLLECTION_SITE。所以我得到這樣的事情:

SURVEY_DATE FISHING_SITE DATA_COLLECTION_SITE 
2012-07-01 Site 1  
2012-07-01    Site 1 
2012-08-10    Site 2 
2012-09-20 Site 1 
2012-09-20    Site 1 

有沒有人知道這樣做的好方法? 在此先感謝。

回答

1

有可能是更好的解決方案,但你可以這樣做:

d1 <- do.call("paste", df1) 
d2 <- do.call("paste", df2) 
> df1[d1%in%d2, ] 
    SURVEY_DATE DATA_COLLECTION_SITE 
1 2012-07-01    Site 1 
3 2012-08-10    Site 2 
6 2012-09-20    Site 1 

而對於最後的結果:

> df3 <- df1[d1%in%d2, ] 
> df4 <- df2[d2%in%d1, ] 
> 
> df3$FISHING_SITE <- NA 
> df4$DATA_COLLECTION_SITE <- NA 
> 
> rbind(df3, df4) 
    SURVEY_DATE DATA_COLLECTION_SITE FISHING_SITE 
1 2012-07-01    Site 1   <NA> 
3 2012-08-10    Site 2   <NA> 
6 2012-09-20    Site 1   <NA> 
11 2012-07-01     <NA>  Site 1 
31 2012-08-10     <NA>  Site 2 
61 2012-09-20     <NA>  Site 1 
1

使用dplyr用於合併和plyr進行訂購和有約束力的行(他們住在和諧嗎?):

library(dplyr) 
library(plyr) 
names(dataSC_FSITE_combos) <- names(dataSC_SC_combos) <- c("SURVEY_DATE", "SITE") 
ijoin <- inner_join(dataSC_SC_combos, dataSC_FSITE_combos) 
# SURVEY_DATE SITE 
# 1 2012-07-01 Site 1 
# 2 2012-08-10 Site 2 
# 3 2012-09-20 Site 1 

arrange(rbind.fill(
    setNames(
    left_join(ijoin, dataSC_SC_combos), c("SURVEY_DATE","DATA_COLLECTION_SITE")), 
    setNames(
    left_join(ijoin, dataSC_FSITE_combos), c("SURVEY_DATE", "FISHING_SITE"))), SURVEY_DATE) 
# SURVEY_DATE DATA_COLLECTION_SITE FISHING_SITE 
# 1 2012-07-01    Site 1   <NA> 
# 2 2012-07-01     <NA>  Site 1 
# 3 2012-08-10    Site 2   <NA> 
# 4 2012-08-10     <NA>  Site 2 
# 5 2012-09-20    Site 1   <NA> 
# 6 2012-09-20     <NA>  Site 1 
+0

謝謝大家。 df1 [%d2中的d1%]可以很好地啓動。但我需要使用來自較大數據框(也包含其他列)的子集中的日期和站點,而不是創建新的數據框。有關如何做到這一點的任何想法? – EricaO