删除包含R中特定日期的行

时间:2014-11-21 18:09:14

标签: r dataframe subset posixct

免责声明:我将走出这个看起来很傻的人。

我有一个数据框,其中包含一个日期为POSIXct的列。我试图删除一些包含特定日期 - 公共假期的行。我尝试用这个来做到这一点:

> modelset.nonholiday <- modelset[!modelset$date == as.POSIXct("2013-12-31")| !modelset$date ==as.POSIXct("2013-07-04") | !modelset$date == as.POSIXct("2014-07-04")| !modelset$date == as.POSIXct ("2013-11-28") | !modelset$date == as.POSIXct ("2013-11-29") | !modelset$date == as.POSIXct ("2013-12-24") | !modelset$date == as.POSIXct ("2013-12-25") | !modelset$date == as.POSIXct ("2014-02-14") | !modelset$date == as.POSIXct ("2014-04-20") | !modelset$date == as.POSIXct ("2014-05-26"), ]

以上不起作用。它返回的数据框只删除了第一个我尝试过:

modelset[!modelset$date %in% c("2013-12-31", "2013-07-04", "2014-07-04",
             "2013-11-28", "2013-11-29", "2013-12-24", "2013-12-25", "2014-02-14", 
             "2014-04-20", "2014-05-26"), ]

这也不起作用。我也尝试过:

`%notin%` <- function(x,y) !(x %in% y) 

modelset[modelset$date %notin% as.POSIXct(c("2013-12-31", "2013-07-04", "2014-07-04",
                 "2013-11-28", "2013-11-29", "2013-12-24", "2013-12-25", "2014-02-14",
                 "2014-04-20", "2014-05-26")), ]`

我提到Remove Rows From Data Frame where a Row match a StringR remove rows containing a certain valueStandard way to remove multiple elements from a dataframe,但似乎无法找到我做错的事。

> head(modelset)
    date spot.volume.loc spot.volume.nat nat.imp.a loc.imp.a nat.imp.m loc.imp.m branded.leads esi.leads
1 2013-07-01            2988             215     13931    4155.3      5770    1853.7           331       363
2 2013-07-02            3200             218     12589    4651.3      5374    2207.8           293       428
3 2013-07-03            3066             203     10305    3921.0      4754    1759.2           273       325
4 2013-07-04            3153              83      2353    4135.6       999    1912.2           172       184
5 2013-07-05            2959              59      1553    3573.4       815    1662.3           193       246
6 2013-07-06             667              53      2219     456.7       889     214.8           161       203
tv.leads callin.leads total.leads total.imp.a total.imp.m       day week quarter on.off
1      195           41         930     18086.3      7623.7    Monday   26      Q3   1.25
2      192           50         963     17240.3      7581.8   Tuesday   26      Q3   1.00
3      149           38         785     14226.0      6513.2 Wednesday   26      Q3   1.00
4       34            0         390      6488.6      2911.2  Thursday   26      Q3   1.00
5       50           18         507      5126.4      2477.3    Friday   26      Q3   0.75
6       14            9         387      2675.7      1103.8  Saturday   26      Q3   0.50

2 个答案:

答案 0 :(得分:2)

要使用dplyr并使用%notin%方法获得答案,您还可以:

library(dplyr)

dates <- 
  as.POSIXct(c("2013-12-31", "2013-07-04", "2014-07-04", "2013-11-28", "2013-11-29", 
               "2013-12-24", "2013-12-25", "2014-02-14", "2014-04-20", "2014-05-26"))

`%notin%` <- function(x,y) !(x %in% y) 

modelset %>%
  filter(date %notin% dates)

答案 1 :(得分:1)

使用如下所述的语句:

dat <- as.POSIXct(c("2013-12-31", "2013-07-04", "2014-07-04",
                                         "2013-11-28", "2013-11-29", "2013-12-24", "2013-12-25", "2014-02-14", 
                                         "2014-04-20", "2014-05-26"))

dat[which(dat != as.POSIXct(c("2013-12-31", "2014-07-04")))]

在你的情况下,我相信它会是:

modelset <- modelset[which(!modelset$date %in% c("2013-12-31", "2013-07-04", "2014-07-04",
         "2013-11-28", "2013-11-29", "2013-12-24", "2013-12-25", "2014-02-14", 
         "2014-04-20", "2014-05-26"))]

哪个语句的作用是返回行号,它被评估为真。然后将它放在括号内,它将那些行号指定为唯一要显示的行号。