删除日期在另一个数据框的3天内的行

时间:2017-05-23 18:27:19

标签: r

我发现我的问题可能类似于this one,但我可以弄清楚如何根据我的情况进行调整。

我有一个数据集包含图像的日期,另一个数据集包含下雨的日期。我想删除下雨后3天内拍摄的图像。

E.g。 例如:

df1 <- data.frame(c(1,2,3,4), as.Date(c("1934-05-20", "1934-05-03", "1934-05-04", "1934-05-01")))
names(df1) <- c('img', 'date')

df2 <- data.frame(c(3,8,64,5,7), as.Date(c("1934-05-27", "1934-05-25", "1934-05-15", "1934-05-04", "1934-05-02")))
names(df2) <- c('rain', 'date')

给我们:

> df1
  img       date
1   1 1934-05-20
2   2 1934-05-04
3   3 1934-05-03
4   4 1934-05-01

> df2
   rain       date
1     3 1934-05-27
2     8 1934-05-25
3    64 1934-05-15
4     5 1934-05-04
5     7 1934-05-02

输出如下:

img         date
  1   1934-05-20
  4   1934-05-01

UPD:

我使用了虚拟方法,但它对我有用:

i <- 0
mylist <- c(0,0)
for (x in df1$Date){
  i <- i+1
  x <- as.Date(x, format="%Y-%m-%d", origin = "1970-01-01")
  yr <- format(as.Date(x, format="%Y-%m-%d", origin = "1970-01-01"),"%Y")
  r <- subset(df2, YY == yr)
  y <- x - r$Date
  s <- sum(y >= 0 & y <= 3)
  if (s == 0) {
    mylist[i] <- FALSE 
  } else {mylist[i] <- TRUE
  } 

}
dat <- df1[!mylist, ]

1 个答案:

答案 0 :(得分:3)

首先使用window.onload = function () { var width = $("#p1a").width(); console.log(width) $("#p1a").height(width); } 创建索引:

sapply

您可以将索引用于子集idx <- sapply(df1$date, function(x) {y <- x - df2$date; sum(y >= 0 & y < 3) == 0})

df1

给出:

df1[idx,]