Porovnejte data v datovém sloupci s jediné datum

0

Otázka

Snažím se porovnat každý den (najít maximální hodnotu/poslední datum) pro každý řádek v datové rám sloupec s jediné datum. Například:

   date
1  2018-07-31
2  2018-08-01
3  2018-08-02
4  2018-08-03

Když to srovnám se compare_date="2018-08-02"je třeba si dát výstupní nejnovější data mezi každý řádek a compare_date. Takže nová data frame bude vypadat takto:

   new_date
1  2018-08-02
2  2018-08-02
3  2018-08-02
4  2018-08-03

Snažím se používat sapply tohoto problému:

data$new_date <- sapply(data$date,function(x){max(x,compare_date)})

Ale mám výstup není v datovém formátu, jako je tento:

   date        new_date
1  2018-07-31  17745
2  2018-08-01  17745
3  2018-08-02  17745
4  2018-08-03  17746

Vezměte prosím na Vědomí, že jsem konvertoval data$data a compare_date na formát Data pomocí as.Datum.

Proč je výstup není ve formátu data? Používám sapply špatně?

apply date lapply r
2021-11-23 05:34:07
2

Nejlepší odpověď

0

Tam jsou vectorised funkce jsou k dispozici v R to udělat, namísto použití sapply. V tomto případě, můžete použít 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

údaje

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))
2021-11-23 05:44:13
0

Sapply vrátí, že způsob,. Můžete zjistit důvod použití as.vector

as.vector(data$date)
[1] 17743 17744 17745 17746

Pomocí Reduce a lapply bude to pomáhá

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
2021-11-23 05:45:29

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................