将数据框列中的日期与单个日期进行比较
Compare dates in a dataframe column with a single date
我正在尝试将数据框列中每一行的每个日期(查找最大 value/latest 日期)与单个日期进行比较。
例如:
date
1 2018-07-31
2 2018-08-01
3 2018-08-02
4 2018-08-03
当我与 compare_date="2018-08-02"
进行比较时,它应该输出每行与 compare_date 之间的最新日期。所以新的数据框看起来像这样:
new_date
1 2018-08-02
2 2018-08-02
3 2018-08-02
4 2018-08-03
我正在尝试使用 sapply 来解决这个问题:
data$new_date <- sapply(data$date,function(x){max(x,compare_date)})
但我得到的输出不是日期格式,如下所示:
date new_date
1 2018-07-31 17745
2 2018-08-01 17745
3 2018-08-02 17745
4 2018-08-03 17746
请注意,我已使用 as.Date.
将数据 $date 和 compare_date 转换为日期格式
为什么输出不是日期格式?我是不是用错了sapply?
R 中有可用的向量化函数来执行此操作,而不是使用 sapply
。在这种情况下,您可以使用 pmax
-
df$date <- as.Date(df$date)
compare_date=as.Date("2018-08-02")
df$date <- pmax(df$date, compare_date)
df
# date
#1 2018-08-02
#2 2018-08-02
#3 2018-08-02
#4 2018-08-03
数据
df <- structure(list(date = c("2018-07-31", "2018-08-01", "2018-08-02",
"2018-08-03")), class = "data.frame", row.names = c(NA, -4L))
以这种方式应用returns。您可以使用 as.vector
找出原因
as.vector(data$date)
[1] 17743 17744 17745 17746
使用 Reduce
和 lapply
会有帮助
data$new_date <- Reduce(c,lapply(data$date,function(x){max(x,as.Date("2018-08-02"))}))
data
date new_date
1 2018-07-31 2018-08-02
2 2018-08-01 2018-08-02
3 2018-08-02 2018-08-02
4 2018-08-03 2018-08-03
我正在尝试将数据框列中每一行的每个日期(查找最大 value/latest 日期)与单个日期进行比较。 例如:
date
1 2018-07-31
2 2018-08-01
3 2018-08-02
4 2018-08-03
当我与 compare_date="2018-08-02"
进行比较时,它应该输出每行与 compare_date 之间的最新日期。所以新的数据框看起来像这样:
new_date
1 2018-08-02
2 2018-08-02
3 2018-08-02
4 2018-08-03
我正在尝试使用 sapply 来解决这个问题:
data$new_date <- sapply(data$date,function(x){max(x,compare_date)})
但我得到的输出不是日期格式,如下所示:
date new_date
1 2018-07-31 17745
2 2018-08-01 17745
3 2018-08-02 17745
4 2018-08-03 17746
请注意,我已使用 as.Date.
将数据 $date 和 compare_date 转换为日期格式为什么输出不是日期格式?我是不是用错了sapply?
R 中有可用的向量化函数来执行此操作,而不是使用 sapply
。在这种情况下,您可以使用 pmax
-
df$date <- as.Date(df$date)
compare_date=as.Date("2018-08-02")
df$date <- pmax(df$date, compare_date)
df
# date
#1 2018-08-02
#2 2018-08-02
#3 2018-08-02
#4 2018-08-03
数据
df <- structure(list(date = c("2018-07-31", "2018-08-01", "2018-08-02",
"2018-08-03")), class = "data.frame", row.names = c(NA, -4L))
以这种方式应用returns。您可以使用 as.vector
as.vector(data$date)
[1] 17743 17744 17745 17746
使用 Reduce
和 lapply
会有帮助
data$new_date <- Reduce(c,lapply(data$date,function(x){max(x,as.Date("2018-08-02"))}))
data
date new_date
1 2018-07-31 2018-08-02
2 2018-08-01 2018-08-02
3 2018-08-02 2018-08-02
4 2018-08-03 2018-08-03