基于2列出现两次的子集行

时间:2017-06-26 20:36:55

标签: r dataframe

我正在尝试根据DATE和UNIQUEID列对我的df(YearlyDataTMEANPre)中出现两次的行进行子集化。这就是我的df的样子。

            ID     DATE TYPE VALUE COL2 NA. NA.1 NA.2 UNIQUEID
6  ASN00015643 20170101 TMAX 81.32             a <NA>      330
7  ASN00015643 20170101 TMIN 71.24             a <NA>      330
9  ASN00085296 20170101 TMAX 71.06             a <NA>      733
10 ASN00085296 20170101 TMIN 54.86             a <NA>      733
13 ASN00085280 20170101 TMIN 60.08             a <NA>      730
15 ASN00040209 20170101 TMAX 84.74             a <NA>      492
16 ASN00040209 20170101 TMIN 77.00             a <NA>      492
40 CA005030984 20170101 TMAX 12.38             C <NA>     1623
41 CA005030984 20170101 TMIN -2.56             C <NA>     1623

请注意,每个站的每个DATE都有一个TMAX和TMIN值(ID或UNIQUEID)。我试图确保我只获得每个日期都有TMAX和TMIN的行。例如,可能有一天,电台仅记录TMAX而不记录TMIN。我创建了一个数字UNIQUEID来帮助解决这个问题。

我尝试过的代码行是,

YearlyDataTMEAN <- subset(YearlyDataTMEANPre, UNIQUEID & DATE == 2)

然而,这似乎让我得到零行。我必须遗漏一些明显的东西,但我是R的新手。我希望输出看起来像,

                ID     DATE TYPE VALUE COL2 NA. NA.1 NA.2 UNIQUEID
6  ASN00015643 20170101 TMAX 81.32             a <NA>      330
7  ASN00015643 20170101 TMIN 71.24             a <NA>      330
9  ASN00085296 20170101 TMAX 71.06             a <NA>      733
10 ASN00085296 20170101 TMIN 54.86             a <NA>      733
15 ASN00040209 20170101 TMAX 84.74             a <NA>      492
16 ASN00040209 20170101 TMIN 77.00             a <NA>      492
40 CA005030984 20170101 TMAX 12.38             C <NA>     1623
41 CA005030984 20170101 TMIN -2.56             C <NA>     1623

请注意,第一个表中的第13行在输出中消失。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用duplicated功能获得所需内容:

YearlyDataTMEANPre[duplicated(YearlyDataTMEANPre[,c('UNIQUEID', 'DATE')]),]

答案 1 :(得分:0)

我实际上是用子集和表来计算出来的。奇迹确实发生了。

subset(YearlyDataTMEANPre, table(YearlyDataTMEANPre$UNIQUEID, YearlyDataTMEANPre$DATE) == 2)