I want to get the max dated person-country in R
I want to get the country of the person of his max date as table like that :
Here is one option. After grouping by 'person', convert the 'date' to Date
class with lubridate
(assuming that the 'date' format is in %d.%m.%Y
), get the index of the row with which.max
and slice
that row
library(dplyr)
library(lubridate)
df1 %>%
group_by(person) %>%
slice(which.max(dmy(date)))
# if the format is %m.%d.%Y"
# slice(which.max(mdy(date)))
# A tibble: 2 x 3
# Groups: person [2]
# person country date
# <chr> <chr> <chr>
#1 a germany 01.05.2020
#2 c korea 01.01.2023
Or using data.table
library(data.table)
setDT(df1)[, .SD[which.max(as.IDate(date, "%d.%m.%Y"))], person]
df1 <- structure(list(person = c("a", "a", "c", "c", "c"), country = c("usa",
"germany", "france", "china", "korea"), date = c("01.01.2020",
"01.05.2020", "01.01.2021", "01.01.2022", "01.01.2023")),
class = "data.frame", row.names = c(NA,
-5L))
In base R, we can first transform
into Date
object and then select max date for each person
.
subset(transform(df, date = as.Date(date, "%d.%m.%Y")),
date == ave(date, person, FUN = max))
# person country date
#2 a germany 2020-05-01
#5 c korea 2023-01-01