gpt4 book ai didi

R - 如果某个列是统一的或包含不同的因子值,则按组指示

转载 作者:行者123 更新时间:2023-12-04 17:10:32 26 4
gpt4 key购买 nike

我有一个包含 5000 多个组 ID 的 df。每组包含一个或多个观察(测量)。第二列表示测量是完成还是未完成的状态。在大多数情况下,一个组内的所有测量都应包含相同的状态,但情况并非总是如此(例如示例代码中的组 B)。在某些情况下,状态可能会丢失并被过滤掉。

tibble(group_id=factor(c("A", "A", "A","B","B","B","C")), 
status=factor(c("complete","complete", NA, "complete", "not complete", "complete", "complete")))


group_id status
<fct> <fct>
1 A complete
2 A complete
3 A NA
4 B complete
5 B not complete
6 B complete
7 C complete

我想做的是 1.) 创建一个指示器列以指示哪些组在组内的状态不同(不考虑 NA)en 2.) 如果状态在组内不同,则对行进行分组基于这些因素。

group_id   status        uniform_status   status_group
1 A complete TRUE NA
2 A complete TRUE NA
3 A NA NA NA
4 B complete FALSE 1
5 B not complete FALSE 2
6 B complete FALSE 1
7 C complete TRUE NA

我认为第二步可以通过一些 case_when 突变轻松完成,但我在第一步时有点不知所措,因为这需要部分基于多行的条件。

最佳答案

尝试使用 dplyr 函数 group_bymutate:

library(dplyr)
df %>% group_by(group_id) %>%
mutate(uniform_status=all(status != 'not complete')) %>%
mutate(uniform_status=ifelse(is.na(uniform_status) & (status == 'complete'), T, uniform_status), status_group=ifelse(uniform_status == F, (status == 'not complete') + 1, NA))

输出:

# A tibble: 7 x 4
# Groups: group_id [3]
group_id status uniform_status status_group
<fct> <fct> <lgl> <dbl>
1 A complete TRUE NA
2 A complete TRUE NA
3 A <NA> NA NA
4 B complete FALSE 1
5 B not complete FALSE 2
6 B complete FALSE 1
7 C complete TRUE NA

关于R - 如果某个列是统一的或包含不同的因子值,则按组指示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69537719/

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