gpt4 book ai didi

r - 如何根据特定序列中出现的值对列进行变异?

转载 作者:行者123 更新时间:2023-12-03 16:48:18 26 4
gpt4 key购买 nike

我有一个数据框 df .

  df <- data.frame(ID = c(1,1,1,2,2,2,3,3,3,4,4,4,4),  process = c("inspection", "evaluation", "result","inspection", "result", "evaluation", "result", "inspection","result","evaluation","result","result","evaluation"))
我需要插入一列 true_process这样如果 evaluation出现在 result 之前对于特定的 ID ,那么就是 true .如果它在后面或如果它丢失,它应该取值 false .
我试过的代码。
library(dplyr)
df %>%
group_by(ID) %>%
mutate(true_process = case_when(
!any(process == "evaluation") ~ "False",
length(process == "evaluation")[[1]] > length(process == "result")[[1]] ~ "False",
TRUE ~ "True"
))
# A tibble: 13 x 3
# Groups: ID [4]
ID process true_process
<dbl> <fct> <chr>
1 1 inspection True
2 1 evaluation True
3 1 result True
4 2 inspection True
5 2 result True
6 2 evaluation True
7 3 result False
8 3 inspection False
9 3 result False
10 4 evaluation True
11 4 result True
12 4 result True
13 4 evaluation True
预期输出如下
# A tibble: 13 x 3
# Groups: ID [4]
ID process true_process
<dbl> <fct> <lgl>
1 1 inspection TRUE
2 1 evaluation TRUE
3 1 result TRUE
4 2 inspection FALSE
5 2 result FALSE
6 2 evaluation FALSE
7 3 result FALSE
8 3 inspection FALSE
9 3 result FALSE
10 4 evaluation FALSE
11 4 result FALSE
12 4 result FALSE
13 4 evaluation FALSE

最佳答案

根据您更新的数据,您可以检查 evaluation 最后一个实例的索引是否存在。小于 result 的任何一个索引.

library(dplyr)

df %>%
group_by(ID) %>%
mutate(true_process = any(tail(which(process == "evaluation"), 1) < which(process == "result")))


# A tibble: 13 x 3
# Groups: ID [4]
ID process true_process
<dbl> <chr> <lgl>
1 1 inspection TRUE
2 1 evaluation TRUE
3 1 result TRUE
4 2 inspection FALSE
5 2 result FALSE
6 2 evaluation FALSE
7 3 result FALSE
8 3 inspection FALSE
9 3 result FALSE
10 4 evaluation FALSE
11 4 result FALSE
12 4 result FALSE
13 4 evaluation FALSE

关于r - 如何根据特定序列中出现的值对列进行变异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63250768/

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