我正在嘗試將資料框列中每一行的每個日期(查找最大值/最新日期)與單個日期進行比較。例如:
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 將 data$date 和 compare_date 轉換為日期格式。
為什么輸出不是日期格式?我是否以錯誤的方式使用 sapply?
uj5u.com熱心網友回復:
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))
uj5u.com熱心網友回復:
Sapply 以這種方式回傳。您可能會找出原因使用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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/366052.html
