gpt4 book ai didi

R:在每个组内创建编号

转载 作者:行者123 更新时间:2023-12-05 02:32:46 29 4
gpt4 key购买 nike

我拥有的数据:

x = tibble(
study = c("A", "B", "C", "A", "B", "A", "B", "C", "A", "B"),
ID = c(001, 001, 001, 005, 005, 007, 007, 007, 012, 012)
)

目标是创建“数字”变量,它从 1 开始按顺序为每个唯一 ID 显示相同的数字。

goal = tibble(
study = c("A", "B", "C", "A", "B", "A", "B", "C", "A", "B"),
ID = c(001, 001, 001, 005, 005, 007, 007, 007, 012, 012),
number = c(1, 1, 1, 2, 2, 3, 3, 3, 4, 4)
)

然后如果在每个 ID 组中,研究是不完整的(例如,对于 number = 2,研究只有 A 和 B,而不是 A、B、C),那么如何删除与该 ID 关联的 obs (例如,删除数量为“2”的对象)?

谢谢!

B 部分的更新后续问题:

一旦我们有了 goal 数据集,我想删除按 ID 分组的 obs,它们在 study 变量方面满足以下要求:

A 和 D 是必需的,B 和 C 中的一个是必需的(所以要么是 B 要么是 C),有时每个字母会出现不止一次。

x = tibble(
study = c("A", "B", "C", "D", "A", "B", "A", "B", "C", "A", "B", "C", "D", "D", "A", "B", "D", "B", "C", "D"),
ID = c(001, 001, 001, 001, 005, 005, 007, 007, 007, 012, 012, 012, 012, 012, 013, 013, 013, 018, 018, 018),
number = c(1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6)
)

所以在上面的 goal 数据集中,我想删除:(1) Obs #5 和 6 共享组号 2,因为它们在 study 变量中没有 A、B 或 C 和 D。(2) Obs #18, 19, 20 共享组号6,原因同(1)。

我想保留其余的 obs,因为在每个数字组中,它们有 A、B 或 C 和 D。我不能在这里使用 filter(n() > 3),因为那样会删除带有5 号。

最佳答案

我们可以使用cur_group_id()

library(dplyr)

x %>%
group_by(ID) %>%
mutate(number = cur_group_id())
  study    ID  number
<chr> <dbl> <int>
1 A 1 1
2 B 1 1
3 C 1 1
4 A 5 2
5 B 5 2
6 A 7 3
7 B 7 3
8 C 7 3
9 A 12 4
10 B 12 4

library(dplyr)
x %>%
mutate(number = cumsum(ID != lag(ID, default = first(ID)))+1)

study ID number
<chr> <dbl> <dbl>
1 A 1 1
2 B 1 1
3 C 1 1
4 A 5 2
5 B 5 2
6 A 7 3
7 B 7 3
8 C 7 3
9 A 12 4
10 B 12 4

关于R:在每个组内创建编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71147864/

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