[英]Removing rows containing specific dates in R
免责声明:我将从这种愚蠢的表情中走出来。
我有一个数据框,其中包含日期为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")), ]`
我已经提到了从数据框中删除行,其中行匹配字符串 , R删除包含特定值的行 ,以及从数据框中 删除多个元素的标准方法,但似乎找不到我做错的事情。
> 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
对于使用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)
像这样使用which语句:
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"))]
what语句的作用是返回行号,该行的值被确定为true。 然后将其放在方括号内,它将那些行号指定为唯一要显示的行号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.