【发布时间】:2023-03-11 19:46:01
【问题描述】:
我有一个包含两列的数据框,一个 ID 列和一个带有与相应 ID 相关的子 ID 的列。子 ID 可以再次具有子 ID(在这种情况下,以前的子 ID 现在是一个 ID)。
library(tibble)
df <- tibble(id = c(1, 1, 2, 2, 3, 7), sub_id = c(2, 3, 4, 5, 6, 8))
df
# A tibble: 6 x 2
id sub_id
<dbl> <dbl>
1 1 2
2 1 3
3 2 4
4 2 5
5 3 6
6 7 8
我想编写一个函数来查找与 ID 相关的所有子 ID。它应该返回一个包含所有子 ID 的向量。
find_all_sub_ids <- function (data, id) {
data %>% ...
}
find_all_sub_ids(df, id = 1)
[1] 2 3 4 5 6
find_all_sub_ids(df, id = 2)
[1] 4 5
find_all_sub_ids(df, id = 9)
[1] NULL
这与我迄今为止在 R 中所做的一切都非常不同,我很难为这个问题写一个好的标题。因此,如果使用正确的措辞,我可能已经通过谷歌搜索找到了答案。
我解决这个问题的第一个直觉是 while 循环。由于我也不知道可能有多少子级别,因此该功能应继续执行,直到找到所有子级别。虽然我从来没有使用过 while 循环,也不知道如何在这里实现它们。
也许有人知道解决这个问题的好方法。谢谢!
编辑:忘记将 tibble 分配给 df 并在函数调用中使用此参数。
【问题讨论】:
-
如果只有
2,3,为什么find_all_sub_ids(id = 1)会给你这么多数字? -
与
dplyr和你的tibble 叫DF 你可以做find_all_sub_ids <- function (x) dplyr::filter(DF, id==x) %>% .$sub_id