如何根据它们与R中上下行的差异删除数据框中的行?

时间:2017-09-05 04:29:48

标签: r data-cleaning

我在R magic query中有一个数据框,其中一列为device id,另一列为time。时间格式为2013-05-02 09:20:12

dataframe按升序排列。我正在尝试删除time列(仅基于天数)大于上面一行的X天的所有行。

有没有办法应用这个?

4 个答案:

答案 0 :(得分:1)

首先创建一个可重现的示例:

dates = seq(as.Date('2016-01-01'), as.Date('2016-07-01'), by = "days")
df <- data.frame(dateCol = sample(dates, 100))

然后,您可以创建一个计算列,该列采用上一个日期并为其添加4(或X天):

df$plusXdays = NA
df$plusXdays[2:nrow(df)] = df$dateCol[1:(nrow(df)-1)]
df$plusXdays = df$plusXdays + 4

然后您可以过滤您的专栏:

df = df[df$dateCol > df$plusXdays, ]

删掉计算专栏:

df$plusXdays = NULL

希望它有所帮助。

答案 1 :(得分:1)

# create data.frame
d <- data.frame(device_id=1:15,x.time= as.POSIXct(x = c( '01.01.2017 16:50:00', '03.01.2017 13:09:25', 
             '05.01.2017 0:23:55', '06.01.2017 12:17:55', '08.01.2017 5:10:16',
             '09.01.2017 18:00:07', '11.01.2017 17:46:31', '13.01.2017 1:05:36', 
             '14.01.2017 20:00:39', '15.01.2017 22:42:36', '17.01.2017 3:05:08', 
             '18.01.2017 12:38:02', '20.01.2017 1:02:43', '21.01.2017 2:56:34', 
             '22.01.2017 14:55:48' ),format = "%d.%m.%Y %H:%M:%S"))

print(d)
X <- 1 # set days difference
library(dplyr)
d %>% tbl_df %>% mutate(x.dates=as.Date(x.time),prev.diff=x.dates-lag(x.dates)) %>% print %>% # calculate and view days between... 
filter(prev.diff<=X) # select dates which have days between previos date <= X day

答案 2 :(得分:1)

试试这个:

subset(df,c(0,diff(as.Date(time))) <=X)

答案 3 :(得分:0)

你可以试试这个:

假设您的表格如下:

device_id <- c("A1", "A2", "A3", "A4")
date <- c("2001-01-01", "2001-01-01", "2001-01-02", "2001-01-03")
dat <- data.frame(device_id, date)
dat$date <- as.Date(dat$date)

您可以使用上一行中的日期创建一个附加列:

dat["date.previous"] <- as.Date(c(NA, head(dat["date"], dim(dat)[1] - 1)[[1]]))

然后创建一个辅助列以识别这两者之间的差异:

dat$date.diff <- dat$date - dat$date.previous

最后,你排除那些大于X天(在我的情况下为1)

的那些
library("dplyr")
dat <- subset(dat, !date.diff >= 1)