我有2个数据帧。这些数据帧的截断示例如下:
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中的站点。复杂的部分是给定的
2012-07-01 Site 1
在dataSC_ds中,我想在dataSC中保留2012-07-01的行,其中Site 1是FISHING_SITE或DATA_COLLECTION_SITE。
如果您对我如何做到这一点有任何想法,请告诉我。提前谢谢。
答案 0 :(得分: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