基于两列组合的子集数据帧

时间:2014-02-20 01:37:14

标签: r dataframe subset

我有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。

如果您对我如何做到这一点有任何想法,请告诉我。提前谢谢。

1 个答案:

答案 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