Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中的date from列中查找下一个大于date的日期_R_Sqldf - Fatal编程技术网

在R中的date from列中查找下一个大于date的日期

在R中的date from列中查找下一个大于date的日期,r,sqldf,R,Sqldf,我想在列中查找大于给定日期的第一个日期。 例如: 样本输出: Pnp,Date1,Date2,Date3,New Column A100,1/1/2020,1/1/2020, 1/7/2020 A100,1/1/2020,1/7/2020,1/7/2020 A100,1/1/2020,1/1/2021,1/72020 A100,1/1/2020,1/7/2021,1/7/2020 我的意思是基于date1中的日期,该日期大于Date2中的date1(在Date2中的第一个较

我想在列中查找大于给定日期的第一个日期。 例如:

样本输出:

Pnp,Date1,Date2,Date3,New Column  
A100,1/1/2020,1/1/2020, 1/7/2020  
A100,1/1/2020,1/7/2020,1/7/2020  
A100,1/1/2020,1/1/2021,1/72020  
A100,1/1/2020,1/7/2021,1/7/2020  
我的意思是基于date1中的日期,该日期大于
Date2
中的
date1
(在
Date2
中的第一个较大值)以放入
新列中

示例代码是:


library(dplyr)
library(sqldf)
monthly_sequence_03<- data.frame('Pnp' = 'A100','Frequency' = 3,'Duration' = c('Month'),'Date1' =seq(as.Date('2020-01-01'), as.Date('2025-6-30'), by = '3 months'))
monthly_sequence_06<- data.frame('Pnp' = 'A100','Frequency' = 6,'Duration' = c('Month'),'Date2' =seq(as.Date('2020-01-01'), as.Date('2025-6-30'), by = '6 months'))

new_df <- sqldf("select a.*,b.Date2 from monthly_sequence_03 as a
                left join monthly_sequence_06 as b
                on a.pnp = b.pnp")


new_df <-new_df[
  order( new_df[,3], new_df[,4] ),
  ]


图书馆(dplyr)
库(sqldf)

每月\u序列\u 03我会计算
Date2
的潜在客户,并将其连接回您的数据框架

new_df%>%
左联合(新的联合%>%transmute(Date2,Date3=lead(Date2))%%>%distinct(),by=c(“Date1”=“Date2”))

如果您试图在这些列中保留两个日期之间较大的日期,请为此编写一个快速函数,并将其应用于DF中的列以创建新列

可以这样写:

 new_df$Date = as.Date(sapply(1:nrow(new_df), function(x){
    Date1 = new_df$Date1[x]
    Date2 = new_df$Date2[x]
    if(Date1 > Date2){
    return(Date1)}else{
    return(Date2)}}), origin = "1970-01-01")

感谢eastclintwood和Pceam。我结合了逻辑并添加了我的一部分。它给了我所需的结果

ppp <- filter(new_df,Date2 > Date1)

ere <- ppp %>% group_by(Pnp,Frequency,Duration,Date1) %>% mutate(new_Date_11 = first(Date2))
ppp日期1)
ere%分组依据(Pnp、频率、持续时间、日期1)%>%突变(新日期11=第一个(日期2))
再次感谢

ppp <- filter(new_df,Date2 > Date1)

ere <- ppp %>% group_by(Pnp,Frequency,Duration,Date1) %>% mutate(new_Date_11 = first(Date2))