此問題與本組相關,按 id 和 drug(日期<100 天)取最早和最晚日期
資料集是:
mydata = data.frame (Id =c(1,1,1,1,1,1,1,1,1,1),
Date = c("2000-01-01","2000-01-05","2000-02-02", "2000-02-12",
"2000-02-14","2000-05-13", "2000-05-15", "2000-05-17",
"2000-05-16", "2000-05-20"),
drug = c("A","A","B","B","B","A","A","A","C","C"))
Id Date drug
1 1 2000-01-01 A
2 1 2000-01-05 A
3 1 2000-02-02 B
4 1 2000-02-12 B
5 1 2000-02-14 B
6 1 2000-05-13 A
7 1 2000-05-15 A
8 1 2000-05-17 A
9 1 2000-05-16 C
10 1 2000-05-20 C
使用此代碼:
library(lubridate)
library(dplyr)
mydata %>%
group_by(Id, drug) %>%
mutate(Date = ymd(Date),
Diff = as.numeric(Date - lag(Date, default = Date[1])),
startDate = min(Date, na.rm = T),
endDate = max(Date, na.rm = T),
startDate = ifelse(Diff > 100, Date, startdate)
)
Id Date drug Diff startDate endDate
<dbl> <date> <chr> <dbl> <dbl> <date>
1 1 2000-01-01 A 0 17257 2000-05-17
2 1 2000-01-05 A 4 17257 2000-05-17
3 1 2000-02-02 B 0 17257 2000-02-14
4 1 2000-02-12 B 10 17257 2000-02-14
5 1 2000-02-14 B 2 17257 2000-02-14
6 1 2000-05-13 A 129 11090 2000-05-17
7 1 2000-05-15 A 2 17257 2000-05-17
8 1 2000-05-17 A 2 17257 2000-05-17
9 1 2000-05-16 C 0 17257 2000-05-20
10 1 2000-05-20 C 4 17257 2000-05-20
該startDate列在課程的最后一行從dateto更改double,我不明白為什么。
我試過了origin= "1970-01-01,,,as.Date...ymd
所以我的問題是為什么會發生這種情況?
uj5u.com熱心網友回復:
ifelse()將類從更改為date的原因double記錄在help("ifelse"):
結果的模式可能取決于 test 的值(參見示例),結果的類屬性(參見 oldClass)取自 test,可能不適用于從 yes 和 no 中選擇的值。
也許,dplyr::if_else()在這里可能更合適:
mydata %>%
group_by(Id, drug) %>%
mutate(Date = lubridate::ymd(Date),
Diff = as.numeric(Date - lag(Date, default = Date[1])),
startDate = min(Date, na.rm = T),
endDate = max(Date, na.rm = T),
startDate = if_else(Diff > 100, Date, startDate)
)
回傳
# A tibble: 10 × 6 # Groups: Id, drug [3] Id Date drug Diff startDate endDate <dbl> <date> <fct> <dbl> <date> <date> 1 1 2000-01-01 A 0 2000-01-01 2000-05-17 2 1 2000-01-05 A 4 2000-01-01 2000-05-17 3 1 2000-02-02 B 0 2000-02-02 2000-02-14 4 1 2000-02-12 B 10 2000-02-02 2000-02-14 5 1 2000-02-14 B 2 2000-02-02 2000-02-14 6 1 2000-05-13 A 129 2000-05-13 2000-05-17 7 1 2000-05-15 A 2 2000-01-01 2000-05-17 8 1 2000-05-17 A 2 2000-01-01 2000-05-17 9 1 2000-05-16 C 0 2000-05-16 2000-05-20 10 1 2000-05-20 C 4 2000-05-16 2000-05-20
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/469400.html
下一篇:一年中周的碳清單
