从R中的列中查找下一个大于日期的日期
Find the next date greater than date in date from column in R
我想在列中查找大于给定日期的第一个日期。
例如:
Pnp, Date1 Date2
A100,1/1/2020,1/1/2020
A100,1/1/2020,1/7/2020
A100,1/1/2020,1/1/2021
A100,1/1/2020,1/7/2021
示例输出:
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
中的第一个更大的值)被放入 New column
。
示例代码是:
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] ),
]
非常感谢任何帮助。
我会计算 Date2
的潜在客户并将它们加入到您的数据框中。
new_df %>%
left_join(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.I 结合了逻辑并添加了我的一部分。它给了我所需的结果。
ppp <- filter(new_df,Date2 > Date1)
ere <- ppp %>% group_by(Pnp,Frequency,Duration,Date1) %>% mutate(new_Date_11 = first(Date2))
再次感谢。
我想在列中查找大于给定日期的第一个日期。 例如:
Pnp, Date1 Date2
A100,1/1/2020,1/1/2020
A100,1/1/2020,1/7/2020
A100,1/1/2020,1/1/2021
A100,1/1/2020,1/7/2021
示例输出:
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
中的第一个更大的值)被放入 New column
。
示例代码是:
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] ),
]
非常感谢任何帮助。
我会计算 Date2
的潜在客户并将它们加入到您的数据框中。
new_df %>%
left_join(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.I 结合了逻辑并添加了我的一部分。它给了我所需的结果。
ppp <- filter(new_df,Date2 > Date1)
ere <- ppp %>% group_by(Pnp,Frequency,Duration,Date1) %>% mutate(new_Date_11 = first(Date2))
再次感谢。