2014-02-20 48 views
1

我有2個數據幀。這些dataframes的截斷的例子是:基於兩列組合的子集數據幀

dataSC_ds

SURVEY_DATE SITE 
2012-07-01 Site 1 
2012-08-10 Site 2 
2012-09-15 Site 1 
2012-09-20 Site 1 
... 

dataSC

SURVEY_DATE FISHING_SITE DATA_COLLECTION_SITE SHIFT TIME_BLOCK 
2012-07-01 Site 1        AM  9 
2012-07-01     Site 1    AM  9 
2012-07-02 Site 2        AM  11 
2012-07-02     Site 2    AM  11 
2012-07-15 Site 3        PM  15 
2012-07-15     Site 3    PM  15 
2012-08-10 Site 2        PM  16 
2012-08-10     Site 2    PM  16 
2012-08-20 Site 2        AM  11 
2012-08-20     Site 2    AM  11 
2012-09-15 Site 1        AM  9 
2012-09-15     Site 1    AM  9 
2012-09-15 Site 1        AM  10 
2012-09-15     Site 1    AM  10 
2012-09-20 Site 1        PM  13 
2012-09-20     Site 1    PM  13 
2012-09-20 Site 3        PM  15 
2012-09-20     Site 3    PM  15 
... 

我想子集dataSC保持與最新&網站的組合行時,在dataSC_ds中。複雜的部分是,在給定的dataSC_ds

2012-07-01 Site 1 

,我想在dataSC與2012-07-01其中站點1可以是一個FISHING_SITE或DATA_COLLECTION_SITE保留行。

請讓我知道,如果你有任何想法我可以做到這一點。提前致謝。

回答

1

看來你的數據有一些冗餘。捕魚和採集地點不能進行相同的觀察?不過,您可以使用mapply將數據與所有不同的網站進行分組。

# make a function to subset the data 
select <- function(x, y) dataSC[dataSC$SURVEY_DATE== y & (dataSC$FISHING_SITE==x | dataSC$DATA_COLLECTION_SITE==x), ] 

#apply the function with all elements of dataSC_ds$SITE 
subsets <- mapply(select, x=dataSC_ds$SITE, y=dataSC_ds$SURVEY_DATE, SIMPLIFY=FALSE) 

#name the data.frames of the list with data and site 
subsets <- setNames(subsets, paste(dataSC_ds$SURVEY_DATE, dataSC_ds$SITE)) 

這會給你所有的子集的列表:

subsets 

$`2012-07-01 Site 1` 
    SURVEY_DATE FISHING_SITE DATA_COLLECTION_SITE SHIFT TIME_BLOCK 
1 2012-07-01  Site 1       AM   9 
2 2012-07-01       Site 1 AM   9 

$`2012-08-10 Site 2` 
    SURVEY_DATE FISHING_SITE DATA_COLLECTION_SITE SHIFT TIME_BLOCK 
7 2012-08-10  Site 2       PM   16 
8 2012-08-10       Site 2 PM   16 

$`2012-09-15 Site 1` 
    SURVEY_DATE FISHING_SITE DATA_COLLECTION_SITE SHIFT TIME_BLOCK 
11 2012-09-15  Site 1       AM   9 
12 2012-09-15       Site 1 AM   9 
13 2012-09-15  Site 1       AM   10 
14 2012-09-15       Site 1 AM   10 

$`2012-09-20 Site 1` 
    SURVEY_DATE FISHING_SITE DATA_COLLECTION_SITE SHIFT TIME_BLOCK 
15 2012-09-20  Site 1       PM   13 
16 2012-09-20       Site 1 PM   13 
+0

這是有幫助的。謝謝! – EricaO

相關問題