来自 Rebrickable 的主题数据集 https://rebrickable.com/downloads/包括每个主题的 ID 及其父 ID(此处已重命名列),可能会递归(ID 可能有祖父母、曾祖父母等)。这是一个遵循父链 City -> Advent -> Seasonal 的示例:
themes <- data.frame(theme_id = c(206, 207, 208),
theme_name = c("Seasonal", "Advent", "City"),
parent_theme_id = c(NA, 206, 207))
这是我的基本 R 代码,用于跟踪父 ID,直到达到 NA,即没有父 ID:
for (i in 1:nrow(themes)) {
orig_id <- themes[i,]$theme_id
cur_id <- orig_id
repeat {
par_id <- themes[themes$theme_id == cur_id,]$parent_theme_id
if (is.na(par_id)) break
cur_id <- par_id
}
themes[themes$theme_id == orig_id,]$ancestor_theme_id = cur_id
}
是否有更好的 tidyverse 或基本 R 方法来创建由最大祖先 ID 组成的新列?我想不出一种好方法来递归地跟踪 ID“指针”,而无需一次操作一行并在某处进行循环。