Tidyverse 重复跟踪父 ID 直到祖先的方法

2024-03-28

来自 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“指针”,而无需一次操作一行并在某处进行循环。


正如 @r2evans 在评论中解释的那样,递归查找本身没有 tidyverse 函数,但是您可以通过定义递归函数并从中调用它来使代码更加简洁和 tidyverse-ymutate(map_dbl()):

library(dplyr)
library(purrr)

find_ancestor <- function(id) {
  dat <- cur_data()
  parent <- filter(dat, theme_id == id)$parent_theme_id
  if (is.na(parent)) id else find_ancestor(parent)
}

themes %>% 
  mutate(ancestor_theme_id = map_dbl(theme_id, find_ancestor))
  theme_id theme_name parent_theme_id ancestor_theme_id
1      206   Seasonal              NA               206
2      207     Advent             206               206
3      208       City             207               206
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tidyverse 重复跟踪父 ID 直到祖先的方法 的相关文章

  • 将非平凡函数应用于 data.table 的有序子集

    Problem 我正在尝试使用我新发现的 data table 功能 永久 来计算一堆数据的频率内容 如下所示 Sample Channel Trial Voltage Class Subject 1 1 1 196 82253 1 1 1
  • xml2 包 (R) 中的 xml_find_all 函数未找到相关节点

    我使用 R 中的 xml2 包来访问 xml 数据 发现它在不同的 xml documents 上表现不同 在这个宠物的例子中 library xml2 doc lt read xml
  • R中不同级别的李克特分组

    我想使用 Likert 包 并按变量分组并绘制结果 问题是我想要可视化的变量有不同的级别 有没有解决的办法 一个简单的例子来说明我的问题 library reshape library likert foo lt data frame ca
  • 方案中的尾递归幂函数

    我在方案中编写尾递归幂函数时遇到问题 我想使用辅助函数来编写该函数 我知道我需要一个参数来保存累计值 但在那之后我就陷入了困境 我的代码如下 define pow tr a b define pow tr h result if b 0 r
  • 从 Cox PH 模型预测概率

    我正在尝试使用 cox 模型来预测时间 称为停止 3 后失败的概率 bladder1 lt bladder bladder enum lt 5 coxmodel coxph Surv stop event rx size number cl
  • 在 Clojure 中退出 Recur 循环

    我想跳出下面的循环 并在第 10 行计算结果为 true 时返回最佳最小移动 我查看了 print 语句的输出 当第 10 行的计算结果为 true 时 它 找到了我正在查找的数据 但仍然重复出现 在 Clojure 中 有没有办法在语句计
  • 将函数应用于每个列组合

    我有一个数据框n列并希望对每个列应用一个函数组合列 这与如何cor 函数将数据帧作为输入并生成相关矩阵作为输出 例如 X lt data frame A rnorm 100 B rnorm 100 C rnorm 100 cor X 这将生
  • 在多面图中用 N 注释 x 轴

    我正在尝试生成一些按治疗条件和访问次数细分的数字结果的箱线图 每个框中的观察次数都放在图下方 并且也标记了访问次数 这里有一些虚假数据可以用来说明 我举了两个我尝试过但不太有效的例子 library ggplot2 library plyr
  • 以计数矩阵作为响应的多项式

    根据帮助multinom 包裹nnet 响应应该是一个因子或具有 K 列的矩阵 它将被解释为每个 K 类的计数 我尝试在第二种情况下使用此函数 但出现错误 这是我所做的示例代码 response lt matrix round runif
  • 如何转置 R markdown 文档中的表格?

    假设我打印一个名为summary table的数据框 如下所示 summary table data frame a c 1 2 3 b c 11 12 13 c c 21 22 23 d c 31 32 33 e c 41 42 43 f
  • 第99章 啤酒瓶递归好像不行

    好的 这是我在学习过程中编写的简单代码 void SingTheSong int NumOfBottles if NumOfBottles 0 printf there are simply no more bottles of beer
  • 使用 plyr daply 将数据帧转换为矩阵

    我正在尝试使用daply函数在plyr包 但我无法让它正确输出 尽管组成矩阵的变量是数字 但矩阵的元素是列表 而不是变量本身 例如 以下是一小部分数据 Month Vehicle Samples 1 Oct 10 31057 256 2 O
  • 递归替换多维数组中特定键每次出现的值

    我有一个数组 其数组深度可能会有所不同 例如 array one gt array array something gt value array something2 gt value2 another gt anothervalue tw
  • R中的等值线绘图问题

    编辑 我已经意识到问题的根源 我只有我有数据的县的计数信息 该信息少于我正在绘制的区域中的县数量 按理说 问题代码行在这里 mapnames lt map county plot FALSE 4 names colorsmatched lt
  • 当我用一个观察值运行回归时,为什么“fastLm()”会返回结果?

    为什么fastLm 当我用一项观察进行回归时返回结果吗 下面为什么不lm and fastLm 结果相等吗 library Rcpp library RcppArmadillo library data table set seed 1 D
  • svyby比例的置信区间

    是否存在创建置信区间的现有函数 从一个svyby比例对象 在我的例子中 是一个二进制项目的交叉表survey包裹 我经常比较各组之间的比例 如果有一个可以提取置信区间的函数 使用调查函数svyciprop而不是confint 下面的示例显示
  • 计算数据帧 R 中字符串的频率

    我想计算数据框中某些字符串的频率 strings lt c pi pie piece pin pinned post df lt as data frame strings 然后我想计算字符串的频率 counts lt c pi in pi
  • 如何在r中进行左连接[重复]

    这个问题在这里已经有答案了 我有两个数据集一和二 数据集一 a b c 111 a 1 112 b 2 113 c 3 114 d 4 115 e 5 数据集二 e d g 222 ss 11 111 ff 22 113 ww 33 114
  • 哪个更快?按引用传递与按值传递 C++

    我认为按引用传递应该比按值传递更快 因为计算机不复制数据 它只是指向数据的地址 但是 请考虑以下 C 代码 include
  • 如何在RcppParallel中调用用户定义的函数?

    受到文章的启发http gallery rcpp org articles parallel distance matrix http gallery rcpp org articles parallel distance matrix 我

随机推荐

  • 如何从 Angular 4 更新/升级到 Angular 5+

    我需要将我的项目从 Angular 4 更新到 Angular 5 我需要将以下所有依赖项更改为 Angular 5 我还将 Angular CLI 更新到了 1 5 0 我尝试创建新项目 但似乎只创建了 Angular 4 项目 ng 新
  • 如何在图像内的任意点上旋转(以及可能的动画)图像?

    我正在使用 Flutter 并且希望图像在我定义的点上旋转 例如 我希望图像在其右上角设置旋转 向下摆动 的动画 我该怎么做呢 这是一个使用以下方法的解决方案FractionalOffset https docs flutter io fl
  • 导入错误:没有模块名称 urllib2

    这是我的代码 import urllib2 request response urllib2 urlopen http www google com html response read print html 有什么帮助吗 如中所述urll
  • ajax div 重新加载后 datepicker 不会启动

    我在 div 中有一个 jquery datepicker 通过 ajax 更新 我可以在整个页面重新加载后打开一次日期选择器 但是在ajax仅更新包含日期选择器输入的div后 我看不到日期选择器 我尝试过针对类似问题的解决方案 但没有成功
  • 在 Matlab 中使用 Pochhammer 符号

    我尝试使用一个脚本来评估波赫默符号 http mathworld wolfram com PochhammerSymbol html 上升阶乘 在Matlab中 但它无法评估pochhammer x n 每当x即使表达式在以下情况下有效 也
  • -bash: /usr/local/bin/virtualenvwrapper.sh: 没有这样的文件或目录 #10

    我没有 sudo 特权 当我跑步时 printf n s n s n s virtualenv export WORKON HOME virtualenvs source usr local bin virtualenvwrapper sh
  • 使用遗留头文件作为 c++20 模块

    我正在将旧代码转换为可作为 C 模块导入的代码 问题是我希望它仍然可以工作并且可以像旧的标头 源版本一样轻松维护 我该怎么做 如果可能的话 是否可以创建一个导出标头内容的模块 也可以接受任何其他可以让您维护旧的 cpp h 文件和模块文件的
  • 如何设置列表视图项目的填充?

    我在 Windows 窗体中的大图标视图上有一个列表视图 图像彼此非常接近 那么我如何为项目设置填充呢 ListView 中没有方法可以执行此操作 你可以看一下LVM SETICONSPACING http msdn microsoft c
  • 所有视图中的单个 .NET Core Razor C# 函数

    我知道有一种方法可以在视图中添加 C 函数并使用以下方法调用它们 functions 方法在我的视图中 但是有没有一种方法可以创建一个共享视图 其中包含这些函数以包含在控制器视图内部 而无需在每个视图上复制相同的代码行 我尝试使用 inje
  • 输出文件名,不是带有选择字符串的字符串

    我正在使用 powershell 来 grep 特定字符串的源代码 如果字符串在文件中 我想要文件的名称 而不是包含该字符串的代码行 我还想要文件名 仅一次 而不是与文件存在的次数一样多地列出 我目前正在使用 gci include sql
  • 在实体框架和 Sql Server 中创建对象计数器

    注 1 我重新表述了问题 它现在由供应商和订单组成 而不是汽车和零件 注 2 此问题是假设的 我的目标是了解如何创建对象计数器 为了满足监管要求 我需要对每个供应商的每个订单进行顺序编号 我在用着 实体框架 与 SQL Server In
  • Django 使用 Ajax 登录?

    我正在开发一个 jquery 函数来使用 ajax 发布登录表单 在ajax成功中 如果登录成功与否 我想以不同的方式处理响应 因此 在 Django 中 我想知道是否可以在现有登录视图的基础上添加一些成功 错误变量 以便与返回的页面一起发
  • 在 C# 中声明事件的语法是什么?

    在我的班级中 我想声明一个其他班级可以订阅的事件 声明事件的正确方法是什么 这不起作用 public event CollectMapsReportingComplete 你忘了提及type 对于非常简单的事件 EventHandler h
  • 由于iOS 7,视图不出现

    我在装有 iOS 7 的 iPhone 上尝试了我的应用程序 除了一件事之外 一切都运行良好 在 iOS 6 版本上 当我执行以下代码时 加载视图 带有活动指示器 出现并在加载结束时消失 在 iOS 7 上 加载期间根本不会出现视图 sel
  • 在 Google Cloud Build yaml 中克隆私有 GitHub 存储库

    根据一个note https cloud google com cloud build docs access private github repos在 Cloud Build 文档中 标题为访问私有 GitHub 存储库 当您使用 Cl
  • 如何保存循环中的字符输出?

    所以我做了这个函数 它只需要一个数字元素 而不是一个向量 salaryCategory function s if s gt 40000 s lt 70000 print Low if s gt 70000 s lt 100000 prin
  • 导入错误:没有名为 cloud.ml 的模块

    我正在尝试按照说明在张量流中使用本地预测 如下所述here https cloud google com sdk gcloud reference ml engine local predict 运行命令gcloud ml engine l
  • 在 Twitter Bootstrap 装订线中放置垂直线的最佳方法

    div class row fluid div class span6 Some content div div class span6 Some content div div 我想在这两列之间的排水沟中间放置一条垂直线 该线不是列的完整
  • GODI-电池:安装问题

    我正在尝试使用 GODI 控制台安装 godi batteries 我似乎已经对所有依赖项进行了排序 例如甘菊 我在 Godi 的界面中收到以下错误 gt ocamlfind ocamlopt shared linkall package
  • Tidyverse 重复跟踪父 ID 直到祖先的方法

    来自 Rebrickable 的主题数据集 https rebrickable com downloads 包括每个主题的 ID 及其父 ID 此处已重命名列 可能会递归 ID 可能有祖父母 曾祖父母等 这是一个遵循父链 City gt A