如何解决如何根据另一列是否满足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,并让重做列在事件的第一行为“否”,在事件中每隔一行为“是”,即接下来的三行。我尝试使用
CATASK %>% group_by(Event) %>% mutate(if (lm_date == min(lm_date) {
Rework == "No"}
else {
Rework == "Yes"
}
))
但无济于事。任何建议将不胜感激!
解决方法
我建议下一个tidyverse
使用mutate()
进行处理,并使用min()
检查最早的日期:
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,410047,410172,411169,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))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。