比较R中的相邻行

比较R中的相邻行,r,loops,date,comparison,row,R,Loops,Date,Comparison,Row,在我的数据框中,我有一个列“dates”,我希望R遍历循环中的每一行日期,看看它之前或之后的日期是否在3-14天的范围内,如果不在,它将被索引到循环结束时要删除的列表 例如: my_dates <- c( "1/4/2019", "1/18/2019", "4/3/2019", "2/20/2019", "4/5/2019") my_dates这里有一个使用lubridate和dplyr的详细方法 my_dates <- c( "1/4/2019", "1/18/2019", "4

在我的数据框中,我有一个列“dates”,我希望R遍历循环中的每一行日期,看看它之前或之后的日期是否在3-14天的范围内,如果不在,它将被索引到循环结束时要删除的列表

例如:

my_dates <- c( "1/4/2019", "1/18/2019", "4/3/2019", "2/20/2019", "4/5/2019")

my_dates这里有一个使用
lubridate
dplyr
的详细方法

my_dates <- c( "1/4/2019", "1/18/2019", "4/3/2019", "2/20/2019", "4/5/2019")

library(lubridate); library(dplyr)
df <- data.frame(dates = mdy(my_dates)) %>%
  arrange(dates) %>%
  mutate(days_prior  = dates - lag(dates),
         days_before = lead(dates) - dates) %>%
  mutate(closest_day = pmin(days_prior, days_before, na.rm = T)) %>%
  filter(closest_day <= 14)
my_日期%
变异(前几天=日期-滞后(日期),
前几天=交付周期(日期)-日期%>%
变异(最近的日=pmin(前几天,前几天,na.rm=T))%>%

过滤(最近的一天这里有一个详细的方法,使用
lubridate
dplyr

my_dates <- c( "1/4/2019", "1/18/2019", "4/3/2019", "2/20/2019", "4/5/2019")

library(lubridate); library(dplyr)
df <- data.frame(dates = mdy(my_dates)) %>%
  arrange(dates) %>%
  mutate(days_prior  = dates - lag(dates),
         days_before = lead(dates) - dates) %>%
  mutate(closest_day = pmin(days_prior, days_before, na.rm = T)) %>%
  filter(closest_day <= 14)
my_日期%
变异(前几天=日期-滞后(日期),
前几天=交付周期(日期)-日期%>%
变异(最近的日=pmin(前几天,前几天,na.rm=T))%>%

过滤(最近的一天使用一点
顺序
ing和
diff
ing:

my_dates <- c( "1/4/2019", "1/18/2019", "4/3/2019", "2/20/2019", "4/5/2019")
my_dates <- as.Date(my_dates, format="%m/%d/%Y")

o <- order(my_dates)
d <- abs(diff(my_dates[o]))

my_dates[o[ c(Inf,d) <= 14 | c(d,Inf) <= 14 ]]
#[1] "2019-01-04" "2019-01-18" "2019-04-03" "2019-04-05"

my_dates使用一点
order
ing和
diff
ing:

my_dates <- c( "1/4/2019", "1/18/2019", "4/3/2019", "2/20/2019", "4/5/2019")
my_dates <- as.Date(my_dates, format="%m/%d/%Y")

o <- order(my_dates)
d <- abs(diff(my_dates[o]))

my_dates[o[ c(Inf,d) <= 14 | c(d,Inf) <= 14 ]]
#[1] "2019-01-04" "2019-01-18" "2019-04-03" "2019-04-05"

my_dates这里是一种来自
外部的方法,数据来自

s=abs(-outer(my_dates,my_dates,'-'))
my_日期[行和(s1]
[1] "2019-01-04" "2019-01-18" "2019-04-03" "2019-04-05"

这里有一个来自
外部的方法,数据来自

s=abs(-outer(my_dates,my_dates,'-'))
my_日期[行和(s1]
[1] "2019-01-04" "2019-01-18" "2019-04-03" "2019-04-05"

它不是应该在3到14天之间,而不仅仅是少于14天吗?我不确定如何解释“3-14天内”,因为可以说1-2天是“在”范围内,也就是少于该范围。如果你想删除当天最接近的一天或最多两天之外的内容,我们只需更改为
过滤器(最近的一天>=3,最近的一天不是应该在3到14天之间,而不仅仅是少于14天吗?我不知道如何解释“在3-14天内”,因为可以说1-2天是“在”范围内,也就是说,小于这个范围。如果你想删掉当天最接近的一天或最多两天之后的事情,我们只需更改为
过滤器(最近的一天>=3,最近的一天谢谢!这很有道理。我忘了提到我也有兴趣分组做这件事。我有一个组“患者ID”我想让R删除不在14天范围内的日期,但前提是它是同一个患者。例如,如果有两个日期,但2019年1月20日属于患者A,2019年1月24日属于患者B,我希望R忽略这一点。我有以下代码:
df@steph.zank-这可能是一个独立的问题,它建立在这个one.理想情况下,您需要再次发布您的
数据表的简单示例(以可复制的形式)再把这个问题作为一个资源点回来。从你的描述来看,这应该不会太难,但如果有一个新的问题/数据,它会更容易。因为你也在使用
数据。table
,可能会有完全不同的方法,可以更好地进行分组。谢谢!这很有意义。我忘了使用mention我也对分组做这件事感兴趣。我有一个分组“患者ID”我想让R删除不在14天范围内的日期,但前提是它是同一个患者。例如,如果有两个日期,但2019年1月20日属于患者A,2019年1月24日属于患者B,我希望R忽略这一点。我有以下代码:
df@steph.zank-这可能是一个独立的问题,它建立在这个one.理想情况下,您需要再次发布您的
数据表的简单示例(以可复制的形式)把这个问题作为一个资源点回来。从你的描述来看应该不难,但如果有一个新的问题/数据,就更容易了。因为你也在使用
data.table
,可能有完全不同的方法可以更好地进行分组。