如何重复删除但控制R中的条件?

时间:2015-11-19 21:07:21

标签: r merge dataframe

我有一个包含两列的数据框,yearmon和x。 yearmon有多个条目。有些在x列中有相应的信息,有些则有NA。

例如,如果2001年1月的一个条目中的某个数据包含x列中的数据,我想保留该行,但删除其中包含NA的2001年1月的其他行。但是,如果2001年1月的条目都没有x列中的数据,我想保留NA列。我尝试过重复数据删除,独特,合并,聚合并没有运气。

以下是我所要求的数据样本:

      Yearmon     Price
1   2001-01-01        NA
2   2001-01-01  188000.0
3   2001-02-01        NA
4   2001-02-01  250000.0
5   2001-03-01        NA
6   2001-03-01  250000.0
7   2001-04-01        NA
8   2001-05-01        NA
9   2001-05-01  325000.0
10  2001-06-01        NA
11  2001-06-01  375000.0
12  2001-07-01        NA
13  2001-08-01        NA
14  2001-09-01        NA
15  2001-10-01        NA
16  2001-11-01        NA
17  2001-11-01  305000.0
18  2001-12-01        NA
19  2001-12-01  360000.0

1 个答案:

答案 0 :(得分:0)

因为您的数据在每个组的开头都以NAs排序,所以您应该能够使用行长编码来计算您希望保留的行的索引:

> df[cumsum(rle(as.integer(df$Yearmon))$lengths),]
      Yearmon  Price
2  2001-01-01 188000
4  2001-02-01 250000
6  2001-03-01 250000
7  2001-04-01     NA
9  2001-05-01 325000
11 2001-06-01 375000
12 2001-07-01     NA
13 2001-08-01     NA
14 2001-09-01     NA
15 2001-10-01     NA
17 2001-11-01 305000
19 2001-12-01 360000

使用by

的速度要慢得多,但更易读
do.call(rbind, by(df, df$Yearmon, tail, 1))