通过使用 tibble 中不同行的值来改变值

2024-02-18

我想计算一个节点到根的距离dtr。我拥有的只是一个向量,其中包含每个节点的父节点 idrel(在这个例子中id == 7是根):

library(tidyverse)

tmp <- tibble(
  id = 1:12,
  rel = c(2,7,4,2,4,5,7,7,10,8,7,7)
)

最后我正在寻找这个结果:

tmp$dtr

[1] 2 1 3 2 3 4 0 1 3 2 1 1

到目前为止,我能够编写以下算法,直到在尝试引用代码中的不同行时陷入困境。

该算法应该像这样工作(伪代码):

  1. 如果不是根,则增加dtr: if(!equals(tid,trel)): dtr = dtr+1
  2. Change tid to trel: tid = trel
  3. Change trel到 到rel值在哪里id == trel
  4. If any !equals(tid,trel)转到 1.,否则结束

首先,我添加了 2 个辅助列来存储临时信息:

tmp <- tmp %>%
  mutate(
    tid = id,
    trel = rel,
    dtr = 0
  )

该算法的前两步工作原理如下:

tmp <- tmp %>%
  mutate(
    dtr = if_else(
      !equals(tid,trel),
      dtr + 1,
      dtr
    ),
    tid = trel
  ) 

第三步我不确定......我尝试使用以下代码来实现它,但这不起作用:

tmp <- tmp %>% 
  mutate(trel = rel[id == .$tid])

结果(当然)是错误的:

tmp$rel

[1] 7 7 7 7 7 7 7 7 7 7 7 7

但为什么不是这个呢? (第一次运行3.时应该是正确的解决方案):

[1] 2 7 2 7 2 4 7 7 10 8 7 7

第四步是通过检查 trel 中是否有多个唯一值来完成:

while(length(unique(tmp$trel)) > 1){
  ...
}

因此完整的算法应该看起来像这样:

get_dtr <- function(tib){
  tmp <- tib %>%
    mutate(
      tid = id,
      trel = rel,
      dtr = 0
    )
  
  while(length(unique(tmp$trel)) > 1){
    tmp <- tmp %>%
      mutate(
        dtr = if_else(
          !equals(tid,trel),
          dtr + 1,
          dtr
        ),
        tid = trel
      ) 
    
    ### Step 3
  }
  tmp
}

知道如何解决这个问题或更简单的解决方案吗?提前致谢!


如果你想自己写一个函数,可以使用下面的代码:

library(tidyverse)

tmp <- tibble(
  id = 1:12,
  rel = c(2,7,4,2,4,5,7,7,10,8,7,7)
)


calc_dtr <- function(id, tmp){
  # find root
  root <- tmp$id[tmp$id == tmp$rel]

  # is this the root node? 
  if(id == root){return(0)}

  # initialize counter
  dtr <- 1
  trel <- tmp$rel[tmp$id == id]

  while(trel != root){
    dtr <- dtr + 1
    trel <- tmp$rel[tmp$id == trel]
  }

  return(dtr)
}

tmp %>% 
  mutate(
    dtr = map_dbl(id, calc_dtr, tmp)
  )

这会产生以下输出:

# A tibble: 12 x 3
      id   rel   dtr
   <int> <dbl> <dbl>
 1     1     2     2
 2     2     7     1
 3     3     4     3
 4     4     2     2
 5     5     4     3
 6     6     5     4
 7     7     7     0
 8     8     7     1
 9     9    10     3
10    10     8     2
11    11     7     1
12    12     7     1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过使用 tibble 中不同行的值来改变值 的相关文章

  • 如何按物种矩阵显示站点内植物物种生物量?

    我之前问过 如何将两列显示为二进制 存在 不存在 矩阵 这个问题得到了两个很好的答案 我现在想更进一步 在原始站点按物种列添加第三列 该列反映每个地块中每个物种的生物量 第 1 列 地块 指定约 200 个地块的代码 第 2 列 物种 指定
  • 具有重复值的两个向量之间的“设置差异”

    我有 3 个向量 x lt c 1 3 5 7 3 8 y lt c 3 5 7 z lt c 3 3 8 我想找到以下元素x那些不在y并且不在z 有没有一个功能f这会给我以下输出 gt f x y 1 3 8 gt f x z 1 5 7
  • 如何解决这个错误--dbWriteTable()

    我成功连接到 MYSQL DB 并尝试将结果写回数据库 dbWriteTable con predicted min forecast min 其中 Forecast min 只是双精度向量 我收到此错误消息 函数 类 fdef mtabl
  • 使用 R 将多个数据帧写入 .csv 文件

    我使用 lapply 将函数应用于多个数据框 data cleaned lt lapply data list shooter cleaning 然后根据主题编号 例如 100 标记列表中每个结果数据帧 names data cleaned
  • Foreach Parallel - 多个输出的组合功能

    我有一组 45000 个用户和 40 多部电影的评分 我需要根据每个用户与其他用户的皮尔逊相关性来预测每个用户的新评分 我还需要存储相似用户的集合以及每个用户 电影组合的相似性 我使用 foreach 包并行执行循环 我设法编写的代码是这样
  • 如何使用 R markdown 和 bookdown 将图形列表和表格列表添加到目录中

    我有一份报告 pdf 输出 我想在附录中添加参考书目 图表列表和表格列表 我希望这三个元素出现在目录中 我添加参考书目通过增加bibliography bibliography bib到我的 yaml 标头 我直接用 LaTex 添加的图形
  • 如何识别数据集中其他列之和的列

    我想编写一个函数 最好用 R 语言 但也欢迎其他语言 它可以识别数据集中列之间的关系 仅限于加法 减法 其实际应用是在大型多列财务数据集上运行它 其中某些列是其他列的小计 并识别此类小计 理想情况下 我希望允许一些小的差异 例如允许舍入问题
  • 如何在 R 中编写 csv 文件,其中我的输入作为行写入文件?

    这是一个非常简单的问题 令我惊讶的是网上没有例子 我有一个向量 vector lt c 1 1 1 1 1 我想将其写为 csv 作为一个简单的行 write csv vector file myfile csv row names FAL
  • R 中的闭包类似于 Python

    首先考虑以下 Python 代码 该代码计算函数被调用的次数 def counter fn count 0 def inner args kwargs nonlocal count count 1 print Function 0 was
  • R中按字母顺序对每一行字符串进行排序

    我环顾四周 似乎找不到解决这个问题的好方法 我有一个包含行名称的列 我想按字母顺序对每一行进行排序 以便稍后可以识别具有相同名称但顺序不同的行 数据如下 names lt c John D Josh C Karl H John D Bob
  • R 因子变量之间的相关性

    我想知道是否有一种简单的方法来识别与另一个变量 100 相关的特征 因子变量 因此 在示例中 该过程将匹配 颜色 和 车辆 以及 植物 和 高度 color lt c black black blue blue yellow vehicle
  • 如何在闪亮中使用带有reactiveValues的debounce

    我知道我可以像这样将 debounce 与reactive 结合使用 这就是我需要的行为 但我想改用reactiveValues ui lt fluidPage textInput inputId text label To see how
  • 如何调整ggplot2中的标题位置

    这是代码 require ggplot2 require grid pdf a pdf png a png a lt qplot date unemploy data economics geom line opts title A b l
  • 在字符串中每个字母后面添加数字

    我有几个具有固定格式的字符串 格式为一个字母后跟一个数字 例如 A3B1C7D1 但是 如果字母后面的数字为 1 则字符串将写为 A3BC7D 我想做的是插入数字 1 然后将字符串转换为A3BC7D to A3B1C7D1 我的示例数据是
  • 在 Ubuntu 上安装软件包需要很长时间

    我之前使用 Windows 作为操作系统 RStudio 用于 Windows 今天切换到 Ubuntu 并再次安装了 R 和 RStudio 当我尝试从 CRAN 安装一些软件包时 仅tidyverse 使用install package
  • 重用 R 中内置的模型

    在 R 中构建模型时 如何保存模型规范以便可以在新数据上重用它 假设我根据历史数据建立逻辑回归 但直到下个月才会有新的观察结果 最好的方法是什么 我考虑过的事情 保存模型对象并在新会话中加载 我知道某些模型可以使用 PMML 导出 但还没有
  • 按行重塑矩阵

    我有一个大小为 18000 x 54 的矩阵 我想将其重塑为大小为 54000 x 18 的矩阵 其中初始矩阵的每一行都变成一个有 3 行的矩阵 让我们举个例子 我有一个矩阵如下 a matrix 1 18 nrow 2 ncol 9 by
  • rvest - 在 1 个标签中抓取 2 个类

    我是新来的 如何提取标签中具有 2 个类名或仅 1 个类名的元素 这是我的代码和问题 doc lt paste span class a1 b1 text1 span span class b1 text2 span library rve
  • RStudio 在临时目录中从 Rmarkdown 创建 PDF 文件

    我使用 RStudio 和 Rmarkdown 来创建报告 由于某种原因 使用 Knit 按钮会导致它仅在某个临时目录中创建 从命令输出来看 似乎 pandoc 本身被指示这样做 我觉得这很奇怪 usr lib rstudio bin pa
  • 如何减小 R Plot 中图例的大小,同时仍使其可读?

    我试图用 R 中的两个 y 轴绘制多年来的一些数据 但是 每当我尝试包含图例时 图例就会主导我的绘图 当我使用其他地方建议的解决方案时 例如keyword和 或使用cex论据 在另一篇文章中建议here https stackoverflo

随机推荐

  • 使用 PHP 在两个 csv 文件之间实现左连接

    由于该解决方案是根据投票良好的答案改编的别处 https stackoverflow com a 25837426 我没想到会遇到问题 问题 我想要LEFT JOIN 文件0 csv https www dropbox com s gx1o
  • 向 Vim 添加命令

    我终于决定尝试一下Vim http en wikipedia org wiki Vim 28text editor 29 因为我对 GUI 编辑器越来越感到沮丧 到目前为止 我很喜欢它 但我无法为我遇到的问题找到任何帮助 我正在尝试映射命令
  • iOS 应用内购买收据字符串解释

    我尝试了解从iTunes服务器获取的收据信息 但找不到相关文档 特别是 它们之间有什么区别unique identifier unique vendor identifier original transaction id 在 WWDC 1
  • 出于什么原因,我们采用 lower_case_with_underscores 命名约定? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 根据你的解释 这可能是也可能不是一个反问句 但这确实让我感到困惑 这个公约有什么意义呢 我知道命名约定不一定要有韵律或背后的原因 但为什么要偏离
  • 如何标记多个 UITableViewCell 并对标记的单元格执行操作?

    我想做的几乎与邮件应用程序所做的一样 当我选择 编辑 时 而不是通常的 删除 按钮 单选按钮出现在用户可以检查的一侧 然后用户可以单击一个按钮来采取对标记单元格的操作 任何类型的操作 不仅仅是删除 有没有苹果示例代码可以做到这一点 任何人都
  • Jackson - 反序列化一个基本枚举

    是否可以反序列化具有基于一的索引的枚举 enum Status Active Inactive status 1 表示 Status Active 但 Jackson 将其设为 Status Inactive public enum Sta
  • Bookdown:单个 html 输出文件

    如果我在第一行下面添加一行 output yml bookdown gitbook split by none css in the bookdown 演示 https github com rstudio bookdown demo输出变
  • 在vim中,我如何回到搜索之前的位置?

    在 vim 中编程我经常去搜索一些东西 拉出它 然后返回到我所在的位置 插入它 修改它 问题是 在我搜索并找到之后 我需要手动找到回到原来位置的路 有没有一种方法可以自动返回到我上次搜索时所在的位置 Ctrl O takes me to t
  • 通过 Safari 打开时,Firebase 动态链接不会重定向到应用程序

    我已经添加了Firebase Dynamic Link在我的应用程序中 当我打开iPhone链接通过Google Chrome 它会将我重定向到应用程序 但是当我尝试通过以下方式打开应用程序时Safari 我通过 Notes 打开链接 而不
  • 使用GD PHP给PNG图像加水印时出现部分黑色背景

    我已经拼凑了一个 PHP 类来使用 PHP 的 GD 函数执行各种与图像相关的功能 它适用于所有图像类型 旋转 翻转 调整大小 裁剪以及较小程度的水印 除后者外 所有这些都可以完美运行 例如 经过一些更改后 旋转的 PNG 图像保留了透明度
  • 在 Windows 8 Metro C# 中显示存储文件

    我想在 UI 上显示资产中的图像文件 我设法将该项目存储为StorageFile 我怎样才能显示它 我尝试在 XAML 中显示它
  • 每当存在具有焦点的只读文本框时,无法检测到按键事件上的 Ctrl + 键快捷键

    我以为我自己解决了这个问题 但它又回来困扰我的应用程序 所以这里是 我在带有几个禁用和只读文本框的表单中注册了以下 keydown 事件处理程序 它们只是按钮的简单快捷方式 private void AccountViewForm KeyD
  • ffmpeg 用于将视频编码为 H264 编解码器格式

    我有一个 mp4 视频文件 MPEG4 视频编解码器 我试图在 Linux 上使用 ffmpeg 将其转换为 H264 视频编解码器格式 原始 h 264 格式 版本 FFmpeg 版本 SVN r0 5 1 4 0 5 1 1ubuntu
  • 如何注册我的 Android 应用程序来解析网站

    我应该如何注册我的 Android 应用程序 或 设备来解析推送站点以获取通知 现在我已连接到 GCM 我无法继续使用解析来注册我的设备 这是基于标准推送通知实现官方 Parse SDK 的最佳方法我的经历 and 多次尝试和错误并且许多
  • 音乐分析和可视化

    我对用 Python 编写音乐可视化工具感兴趣 第一个问题是如何从音乐中获取信息 如音量 频率 转速等 从哪里来 来自声卡还是实际的音乐文件 我的猜测是来自声卡 但是我如何访问声卡和想要的信息 最好以独立于平台的方式 Linux 是必须的
  • IOS:使用 NSUserDefault 存储数组

    我想存储一个数组NSUserDefault 然后 我输入applicationDidEnterBackground NSUserDefaults standardUserDefaults setObject myArray forKey m
  • 递推的复杂度 T(n)=T(n/2T(n/2)+n^2?

    根据主定理 这个递归是 n 2 但是如果我们用树递归来解决这个问题 那么解就是 n 2 logn 难道我做错了什么 如果递推关系为 T n 2T n 2 n 2 那么您处于主定理的第三种情况 并且正则性条件适用 因此 T n Theta n
  • Firebase Crashlytics 无效密钥错误

    我想将 Firebase Crashlytics 集成到我的 Android 游戏中 使用 Cocos2D X 引擎开发 我已按照中提到的步骤进行操作这个链接 https firebase google com docs crashlyti
  • osx 和 clion,找不到 omp.h

    如何说服 cmake 在 CLion 内 我有可用的 OpenMP 标头 我正在尝试编译这个项目SCD https github com DAMA UPC SCD我收到以下错误 15 Building CXX object tools se
  • 通过使用 tibble 中不同行的值来改变值

    我想计算一个节点到根的距离dtr 我拥有的只是一个向量 其中包含每个节点的父节点 idrel 在这个例子中id 7是根 library tidyverse tmp lt tibble id 1 12 rel c 2 7 4 2 4 5 7