![](/img/trans.png)
[英]How can i LAG the previous value that meets a condition in other column (R)?
[英]How can I assign a column a character Value based on whether another column meets a condition in R?
我有多個事件(行)發生在某個日期和時間。 我想將它們按另一列分組,然后在一個單獨的列中,如果它們是最早的日期,則該列將是“否”,如果不是,則該列將是“是”。 下面是我的數據的前 20 行
Event Rework lm_date
1 409974 NA 2019-10-16 18:34:00
2 409974 NA 2019-11-24 17:02:00
3 409974 NA 2019-11-25 17:18:00
4 409974 NA 2019-12-10 20:46:00
5 410047 NA 2019-09-09 20:39:00
6 410047 NA 2019-09-10 18:46:00
7 410172 NA 2019-09-10 18:50:00
8 410172 NA 2019-09-10 20:02:00
9 410172 NA 2019-09-11 20:46:00
10 410172 NA 2019-09-13 17:40:00
11 410172 NA 2019-10-11 03:02:00
12 411169 NA 2019-10-03 16:06:00
13 411169 NA 2019-11-07 20:56:00
14 411169 NA 2019-11-08 20:02:00
15 411229 NA 2019-10-14 16:13:00
16 411229 NA 2019-11-06 16:43:00
17 411229 NA 2019-11-07 21:28:00
18 411229 NA 2019-11-11 21:45:00
19 411929 NA 2019-09-17 22:34:00
20 411929 NA 2019-09-19 20:46:00
例如,我想按事件分組,因此第一組將是 409974,並且返工列的第一行為“否”,事件中每隔一行為“是”,即接下來的 3 行。 我嘗試使用
CATASK %>% group_by(Event) %>% mutate(if (lm_date == min(lm_date) {
Rework == "No"}
else {
Rework == "Yes"
}
))
但無濟於事.. 任何建議將不勝感激!
我建議使用mutate()
並使用min()
檢查最舊的日期的下一個tidyverse
方法:
library(tidyverse)
#Format date
df %>% mutate(lm_date=as.POSIXct(lm_date)) %>%
group_by(Event) %>%
mutate(Rework=ifelse(lm_date==min(lm_date),'No','Yes'))
輸出:
# A tibble: 20 x 3
# Groups: Event [6]
Event lm_date Rework
<dbl> <dttm> <chr>
1 409974 2019-10-16 18:33:59 No
2 409974 2019-11-24 17:02:00 Yes
3 409974 2019-11-25 17:18:00 Yes
4 409974 2019-12-10 20:45:59 Yes
5 410047 2019-09-09 20:39:00 No
6 410047 2019-09-10 18:46:00 Yes
7 410172 2019-09-10 18:49:59 No
8 410172 2019-09-10 20:02:00 Yes
9 410172 2019-09-11 20:45:59 Yes
10 410172 2019-09-13 17:39:59 Yes
11 410172 2019-10-11 03:01:59 Yes
12 411169 2019-10-03 16:05:59 No
13 411169 2019-11-07 20:55:59 Yes
14 411169 2019-11-08 20:02:00 Yes
15 411229 2019-10-14 16:12:59 No
16 411229 2019-11-06 16:43:00 Yes
17 411229 2019-11-07 21:27:59 Yes
18 411229 2019-11-11 21:45:00 Yes
19 411929 2019-09-17 22:34:00 No
20 411929 2019-09-19 20:45:59 Yes
接下來用到的一些數據:
#Data
df <- structure(list(Event = c(409974, 409974, 409974, 409974, 410047,
410047, 410172, 410172, 410172, 410172, 410172, 411169, 411169,
411169, 411229, 411229, 411229, 411229, 411929, 411929), lm_date = structure(c(1571250840,
1574614920, 1574702280, 1576010760, 1568061540, 1568141160, 1568141400,
1568145720, 1568234760, 1568396400, 1570762920, 1570118760, 1573160160,
1573243320, 1571069580, 1573058580, 1573162080, 1573508700, 1568759640,
1568925960), class = c("POSIXct", "POSIXt"), tzone = "GMT")), class = "data.frame", row.names = c(NA,
-20L))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.