R 检测范围内的双日期并调整日期
我有以下数据框:R 检测范围内的双日期并调整日期,r,date,dplyr,R,Date,Dplyr,我有以下数据框: library(hydroGOF) library(ModelMetrics) library(dplyr) Date_from <- c("2013-01-01","2013-01-04","2013-01-06","2013-01-11") Date_to <- c("2013-01-03","2013-01-06","2013-01-10","2013-01-14") Parameter <- c("Par1","Par1","Par1","Par1")
library(hydroGOF)
library(ModelMetrics)
library(dplyr)
Date_from <- c("2013-01-01","2013-01-04","2013-01-06","2013-01-11")
Date_to <- c("2013-01-03","2013-01-06","2013-01-10","2013-01-14")
Parameter <- c("Par1","Par1","Par1","Par1")
conc<-c("1.5","2.5","1.5","1.8")
metals<-data.frame(Date_from,Date_to,Parameter,conc)
metals$Date_from<-as.Date(metals$Date_from)
metals$Date_to<-as.Date(metals$Date_to)
metals$conc<-as.numeric(as.character(metals$conc))
你可以试试:
ind = which(difftime(metals$Date_to,lead(metals$Date_from))==0)+1 #search for time difference == 0, save the index
metals[ind,"Date_from"] = metals[ind,"Date_from"] + 1 # add a day to the start date
你可以试试:
ind = which(difftime(metals$Date_to,lead(metals$Date_from))==0)+1 #search for time difference == 0, save the index
metals[ind,"Date_from"] = metals[ind,"Date_from"] + 1 # add a day to the start date
我们可以使用
dplyr::lag
library(dplyr)
metals %>% mutate(Date_from_u=lag(Date_to,default=0),
Date_from_corr=if_else(Date_from==Date_from_u,Date_from+1,Date_from))
我们可以使用
dplyr::lag
library(dplyr)
metals %>% mutate(Date_from_u=lag(Date_to,default=0),
Date_from_corr=if_else(Date_from==Date_from_u,Date_from+1,Date_from))
lubridate
此处。关键是使用if_else
而不是ifelse
library(dplyr)
library(lubridate)
metals %>%
mutate_if(is.Date,as.Date.character) %>%
mutate(Date_from=ymd(Date_from),Date_to=ymd(Date_to),
Date_from=if_else(Date_from%in%Date_to,Date_from+1,Date_from))
# Date_from Date_to Parameter conc
#1 2013-01-01 2013-01-03 Par1 1.5
#2 2013-01-04 2013-01-06 Par1 2.5
#3 2013-01-07 2013-01-10 Par1 1.5
#4 2013-01-11 2013-01-14 Par1 1.8
lubridate
此处。关键是使用if_else
而不是ifelse
library(dplyr)
library(lubridate)
metals %>%
mutate_if(is.Date,as.Date.character) %>%
mutate(Date_from=ymd(Date_from),Date_to=ymd(Date_to),
Date_from=if_else(Date_from%in%Date_to,Date_from+1,Date_from))
# Date_from Date_to Parameter conc
#1 2013-01-01 2013-01-03 Par1 1.5
#2 2013-01-04 2013-01-06 Par1 2.5
#3 2013-01-07 2013-01-10 Par1 1.5
#4 2013-01-11 2013-01-14 Par1 1.8