gpt4 book ai didi

r - 识别值在另一个特定值之后出现的情况

转载 作者:行者123 更新时间:2023-12-01 16:24:18 25 4
gpt4 key购买 nike

我有下表:

+----+------------+----------+
| ID | Date | Variable |
+----+------------+----------+
| a | 12/03/2017 | d |
| a | 15/04/2017 | d |
| a | 20/06/2017 | c |
| b | 14/05/2017 | c |
| b | 15/08/2017 | c |
| b | 16/09/2017 | c |
+----+------------+----------+

对于每个 ID,我想在单独的列中进行检查,以告知在“d”值出现后是否有“c”值,如下所示:

+----+------------+----------+-------+------------+
| ID | Date | Variable | Check | Date |
+----+------------+----------+-------+------------+
| a | 12/03/2017 | d | 1 | 20/06/2017 |
| a | 15/04/2017 | d | 1 | 20/06/2017 |
| a | 20/06/2017 | c | 1 | 20/06/2017 |
| b | 14/05/2017 | c | 0 | 0 |
| b | 15/08/2017 | c | 0 | 0 |
| b | 16/09/2017 | c | 0 | 0 |
+----+------------+----------+-------+------------+

这不仅仅是查找“c”的出现,而是查看“c”是否出现在d之后。将相应的日期放在单独的列中也会有所帮助。我试图删除重复项,然后识别引导值(或行数 > 1),但是有没有更简单的方法来做到这一点?

任何 dplyr 或 data.table 方法都是最有帮助的。

最佳答案

使用 的解决方案。一定有比这更好的方法,但我认为这应该可行。 unique(Variable[!is.na(Variable)]) 是仅用 c("c", "d"), c( “d”、“c”)“c”“d”。如果您确定不存在 NA,则可以删除 !is.naDate[Variable %in% "c"][1]是选择第一个日期。

dat2 <- dat %>%
group_by(ID) %>%
mutate(Check = ifelse(identical(unique(Variable[!is.na(Variable)]), c("d", "c")),
1L, 0L)) %>%
mutate(Date2 = ifelse(Check == 1L, Date[Variable %in% "c"][1], "0")) %>%
ungroup()
dat2
# # A tibble: 6 x 5
# ID Date Variable Check Date2
# <chr> <chr> <chr> <int> <chr>
# 1 a 12/03/2017 d 1 20/06/2017
# 2 a 15/04/2017 d 1 20/06/2017
# 3 a 20/06/2017 c 1 20/06/2017
# 4 b 14/05/2017 c 0 0
# 5 b 15/08/2017 c 0 0
# 6 b 16/09/2017 c 0 0

数据

dat <- read.table(text = "ID Date Variable
a '12/03/2017' d
a '15/04/2017' d
a '20/06/2017' c
b '14/05/2017' c
b '15/08/2017' c
b '16/09/2017' c",
header = TRUE, stringsAsFactors = FALSE)

关于r - 识别值在另一个特定值之后出现的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48776851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com