R - 从数据框中删除差异小于 30 天的行

标签 r

我的数据框是这样的

df <- read.table(text="
                 id          nr      date
    1            124         1       2017-01-01
    2            122         1       2017-01-03
    3            124         2       2017-01-04
    4            121         1       2017-02-05
    5            124         3       2017-02-06
    6            124         3       2017-04-06
", header=TRUE)

我必须从我的数据框中删除天数差异小于 30 天的行。我通常用 lead 函数来做,然后我计算天数差异,如果它低于限制,那么我将其删除。

但现在我想删除低于限制的每一行。不仅如此;如果它的日期之间的日期差异超过 30 天,那么我必须过滤所有低于限制的下一行。

换句话说,有第一行,应该删除第 2 行和第 3 行,因为日期差异只有几天。第 4 行和第 1 行之间的差异超过 30 天,因此不应删除,第 4 行和第 5 行之间的差异小于 30 天,因此将其删除,结果中应该存在 6,因为差异超过 30 天等等上。

最佳答案

也许有更简单的算法,但这个算法做到了。

remove_dates <- function(DF, col = "date", lim = 30){
  n <- nrow(DF)
  log_inx <- !logical(n)
  i <- 1
  j <- 2
  while(i < n & j <= n){
    d <- difftime(DF[j, col], DF[i, col], unit = "days")
    if(d < lim){
      log_inx[j] <- FALSE
      j <- j + 1
    }else{
      i <- j
      j <- j + 1
    }
  }
  DF[log_inx, ]
}

remove_dates(df)
#   id nr       date
#1 124  1 2017-01-01
#4 121  1 2017-02-05
#6 124  3 2017-04-06

请注意,上面的函数可以在包magrittr管道中使用,%>%

library(dplyr)

df %>% remove_dates()
#   id nr       date
#1 124  1 2017-01-01
#4 121  1 2017-02-05
#6 124  3 2017-04-06

关于R - 从数据框中删除差异小于 30 天的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991198/

相关文章:

R - 了解 regexpr 的输出

R:时间戳、Unix 时间和 'strptime' 的正确用法

r - 获取 R 中回归使用的数据观察值 (plm)

r - 使用 `withCallingHandlers`捕获任意条件

r - 如何在 R 中绘制和分析多变量 SVM 回归

R输入文件阿拉伯语?

html - Flexdashboard 中的 <details><summary> 应答器不起作用

r - ggplot 辅助 y 轴使用 sec_axis 显示 z 分数

r - 如何将季度/月度数据转换为 POSIXct 或 Date

r - 在 shapefile 中保存 ggplot2 coord_map() 图表