我有一個看起來像這樣的資料集
ID date
1 2020-05-01
1 2020-06-13
2 2021-01-02
2 2021-01-02
3 2022-01-07
3 2021-12-14
等等。我的資料集中大約有 30 個變數。我想按 ID 分組,并重寫 df$date 以便每個 ID 只保留最新日期:
ID date
1 2020-06-13
1 2020-06-13
2 2021-01-02
2 2021-01-02
3 2022-01-07
3 2022-01-07
日期格式為“%Y-%m-%d”
uj5u.com熱心網友回復:
您可以使用if_else陳述句來檢查最新日期,并替換任何不是最新的日期。
library(dplyr)
df %>%
group_by(ID) %>%
mutate(date = if_else(date == max(date), as.Date(date), as.Date(max(date))))
# A tibble: 6 × 2
# Groups: ID [3]
ID date
<int> <date>
1 1 2020-06-13
2 1 2020-06-13
3 2 2021-01-02
4 2 2021-01-02
5 3 2022-01-07
6 3 2022-01-07
uj5u.com熱心網友回復:
我們可以使用max(date)with mutate:
library(dplyr)
library(lubridate)
df %>%
mutate(date = ymd(date)) %>% # need only to transform to date class
group_by(ID) %>%
mutate(date = max(date))
ID date
<int> <date>
1 1 2020-06-13
2 1 2020-06-13
3 2 2021-01-02
4 2 2021-01-02
5 3 2022-01-07
6 3 2022-01-07
uj5u.com熱心網友回復:
如果只保留每組最近日期的行是您的目的,那么您可以不使用group_by.
df %>%
arrange(ID, desc(date)) %>%
distinct(ID, .keep_all = T)
ID date
1 1 2020-06-13
2 2 2021-01-02
3 3 2022-01-07
uj5u.com熱心網友回復:
這就是data.table語法的亮點。
library(data.table)
setDT(mydata)[, date := max(date), by = ID]
# ID date
# 1: 1 2020-06-13
# 2: 1 2020-06-13
# 3: 2 2021-01-02
# 4: 2 2021-01-02
# 5: 3 2022-01-07
# 6: 3 2022-01-07
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/446273.html
