用于更新查找表中向量的某些值的规范 tidyverse 方法

2023-11-27

我经常需要根据查找表重新编码数据框列中的一些(不是全部!)值。我对我所知道的解决问题的方法不满意。我希望能够在清晰、稳定、高效方式。在编写自己的函数之前,我想确保我没有复制已经存在的标准。

## Toy example
data = data.frame(
  id = 1:7,
  x = c("A", "A", "B", "C", "D", "AA", ".")
)

lookup = data.frame(
  old = c("A", "D", "."),
  new = c("a", "d", "!")
)

## desired result
#   id  x
# 1  1  a
# 2  2  a
# 3  3  B
# 4  4  C
# 5  5  d
# 6  6 AA
# 7  7  !

我可以通过连接、合并、取消选择来做到这一点,如下所示,但是这个不太清楚如我所愿 - 步骤太多。

## This works, but is more steps than I want
library(dplyr)
data %>%
  left_join(lookup, by = c("x" = "old")) %>%
  mutate(x = coalesce(new, x)) %>%
  select(-new)

也可以用以下方法完成dplyr::recode,如下所示,将查找表转换为命名查找向量。我更喜欢lookup作为数据框,但我对命名向量解决方案很满意。我担心的是recode is the 质疑生命周期阶段,所以我担心这个方法不稳定.

lookup_v = pull(lookup, new) %>% setNames(lookup$old)
data %>%
  mutate(x = recode(x, !!!lookup_v))

也可以这样完成:stringr::str_replace,但使用正则表达式进行整个字符串匹配效率不高。我想有forcats::fct_recode是一个稳定版本recode,但我不想要factor输出(虽然mutate(x = as.character(fct_recode(x, !!!lookup_v)))也许是迄今为止我最喜欢的选择...)。

我本来希望新的rows_update()的家人dplyr函数可以工作,但它对列名很严格,而且我认为它不能更新它所加入的列。 (这是实验性的,所以还没有满足我的稳定性要求。)

我的要求摘要:

  • 单个数据列根据查找数据框(最好)或命名向量(允许)进行更新
  • 并非数据中的所有值都包含在查找中 - 不存在的值不会被修改
  • 必须努力character类输入。更普遍的工作是一件好事。
  • 基本 R 之外没有依赖项tidyverse包(尽管我也有兴趣看到data.table解决方案)
  • 没有使用处于生命周期阶段的功能,例如被取代或质疑。请注意任何实验性生命周期函数,因为它们具有未来的潜力。
  • 简洁、清晰的代码
  • 我不需要极端的优化,但也不需要太低效(比如不需要时的正则表达式)

直接一个data.table解决方案,无%in%.
根据查找/数据表的长度,添加键可以显着提高性能,但在这个简单的示例中情况并非如此。

library(data.table)

setDT(data)
setDT(lookup)

## If needed
# setkey(data,x)
# setkey(lookup,old)

data[lookup, x:=new, on=.(x=old)]
data 

   id  x
1:  1  a
2:  2  a
3:  3  B
4:  4  C
5:  5  d
6:  6 AA
7:  7  !
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于更新查找表中向量的某些值的规范 tidyverse 方法 的相关文章

  • dplyr:带引号变量名的 mutate 的标准评估

    我将如何使用mutate 我的假设是我正在寻找标准评价就我而言 因此mutate 但我对此并不完全有信心 当使用接受变量名列表的函数时 如下所示 createSum function data variableNames data gt m
  • R 带有列和行的分面 qqplots

    我需要使用按行和列的构面创建 qqplot 我了解如何用列和行绘制分面图 但我不确定如何设置我的数据 最终 我想按列和行对数据集进行分组 然后按升序对 建模 结果和 观察到 结果进行排序 同时添加带有 行 组的列和带有 列 组的列 我一直在
  • R中无法连接odbc数据库

    我一直在尝试使用以下命令将我公司的 DMS 连接到 RodbcConnect命令 但收到以下消息 myConn lt odbcConnect NZSQL uid cejacobson pwd password Warning message
  • 如何使用 ggplot2 对曲线下的区域进行着色

    我一直在尝试使用 ggplot2 生成类似于此 R 图形的绘图 xv lt seq 0 4 0 01 yv lt dnorm xv 2 0 5 plot xv yv type l polygon c xv xv lt 1 5 1 5 c y
  • 从受密码保护的站点读取信息

    我一直在 R 教程中使用 readLines 从网站上抓取信息 我现在希望从我自己的网站提取数据 特别是 awstats 数据 但是该域受密码保护 有没有一种方法可以通过用户名和密码传递我需要的特定 awstats 数据的 url url
  • ggsubplot 是否适用于 R 3.2.1+?

    CRAN 提供的 ggsubplot 版本与 R 的最新版本 例如 3 1 1 不兼容 运行 ggsubplot 示例会返回以下错误 Error in layout base data vars drop drop At least one
  • 使用 roxygen2 导入两个同名函数

    我是 CRAN 包的维护者 在加载时收到以下消息 checking whether package qdap can be installed 10s 10s WARNING Found the following significant
  • 如何在 R Markdown 中的内联 LateX 方程中输出 R 变量的值(即动态更新)

    我无法找到一种方法将 r 代码实现到 R markdown 中的内联 LateX 方程中 目标是如果变量 值 发生变化 则不必对它们的值进行硬编码 Given values lt c 1 4 2 5 7 9 avg lt sum value
  • R:(中缀)运算符的两个定义之间的冲突:如何指定包?

    在 R 中 每当两个包定义相同的函数时 很容易指定要使用哪个包pkg foo 但是 当冲突的功能是一个时 你该怎么办 infix运算符 即使用定义 举个例子 两者ggplot2 and crayon define 有没有一种方法可以让我默认
  • 使用 R SOAP (SSOAP) 检索数据/抓取

    在 B cycle 页面 www bcycle com whowantsitmore aspx 上 我试图抓取投票的位置和值 The URL http mapservices bcycle com bcycleservice asmx ht
  • 如何将数据从长格式重塑为宽格式

    我在重新排列以下数据框时遇到问题 set seed 45 dat1 lt data frame name rep c firstName secondName each 4 numbers rep 1 4 2 value rnorm 8 d
  • 在ggplot2中,箱线图线的末尾代表什么?

    我找不到箱线图线条端点代表什么的描述 For example here are point values above and below where the lines end 我意识到盒子的顶部和底部是第 25 个和第 75 个百分位数
  • 来自大型数据帧的共现

    我有一个数据框 其中包含有关每个用户访问过哪些城市的信息 df visited lt data frame user c john john claire claire doe doe city c Antananarivo Barcelo
  • R中具有特定条件的多列变异

    我有这个数据 M1 M2 M3 UCL 1 2 3 1 5 我想在这种情况下创建新列 如果M1大于UCL MM1将为 UP 否则为 NULL 如果M2大于UCL MM2将为 UP 否则为 NULL 如果M3大于UCL MM3将为 UP 否则
  • 如果值大于或小于,则替换数据框中的值

    我在 R 中操作数据帧时遇到问题 这是 R 中的基本内容 但我找不到执行此类操作的最佳命令 虚拟示例 Var1 20 300 39 Var2 49 23 91 Var3 0 239 210 我怎样才能用10如果值小于 则在第 2 列中10
  • 使用 data.table 左连接

    假设我有两个数据表 s dataA A B 1 1 12 2 2 13 3 3 14 4 4 15 dataB A B 1 2 13 2 3 14 我有以下代码 merge test merge dataA dataB by A all d
  • 按名称包含在单个对象中的多个列对 data.frame 进行排序?

    我想排序一个data frame由多列组成 理想情况下使用基础 R 无需任何外部包 尽管如果有必要 就这样吧 读过如何按列对数据框进行排序 https stackoverflow com questions 1296646 how to s
  • ggplot2 + 使用比例 X 的日期结构

    我真的需要帮助 因为我已经迷路了 我正在尝试创建一个折线图 显示几个团队一年来的表现 我将一年分为几个季度 2012 年 1 月 1 日 2012 年 4 月 1 日 2012 年 8 月 1 日 12 1 12 并将 csv 数据帧加载到
  • ggplot:类似于scale_color_steps()的有序因子的色标

    With scale color steps 我们可以通过设置low和high争论 一个例子 df lt data frame x rnorm 99 y rnorm 99 col rnorm 99 ggplot df aes x y col
  • 从 leafletProxy() 返回渲染的传单地图

    是否可以在渲染后在 Shiny 中检索传单地图 下面是一个代码示例 展示了如何生成地图leaflet 与返回的不同leafletProxy 即使它们在渲染时看起来完全相同 是否有一个功能可能不同于leafletProxy 获取实际的 htm

随机推荐

  • Swift 中的 Xcode 6.1 属性字典

    从 Xcode 6 Beta 7 升级到 Xcode 6 1 Beta 2 后 以下内容不再起作用 let font UIFont name Arial size 16 let colour UIColor redColor let att
  • 适用于 iOS5 的 FFmpeg

    有人能够使用 iOS5 sdk 编译 ffmpeg 库吗 我找到了使用 4 3 sdk 的脚本 但没有找到适用于 iOS5 的脚本 我假设使用旧 sdk 和 armv7 构建的库仍然兼容 iOS 5 这是我尝试使用的命令 configure
  • 在过程中将提交放在 DML 之后有什么效果?

    我在一个包中创建了一个过程 该过程正在表中执行插入 删除操作 事务成功后 提交完成 像这样 create or replace package pac is procedure pr test emp id number is begin
  • Java KeyListener 与键绑定

    我正在尝试编写一个计算器并遇到问题 我已经为所有按钮制作了一个动作侦听器 现在我想让从键盘输入数据成为可能 我是否需要为 KeyListener 或 Keybinding 完成所有操作 或者是否有其他方法可以在单击按钮后将其发送到 acti
  • 在 Windows 命令行中自动化 cygwin 命令(最终在 MsBuild 中)

    我遇到的情况是 我有一些 cygwin 命令 我希望在 Windows 命令行中运行它们 例如 chmod 777 home administrator 目前我必须手动输入cygwin bat 然后在cygwin中输入上述命令 我想知道是否
  • 在 Android 上使用 BasicHttpRequest 从 webview 共享 cookie

    我在发送 cookie 作为 http get 的一部分时遇到问题 首先 我进入网络视图中的登录页面 该页面为我提供了一个 cookie 我已经检查过 cookie 存储在 CookieManager 中 然后我使用 BasicHttpRe
  • 将 json 数据转换为 html 表 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 是否有任何 jQuery 或 javascript 库可以根据给定的 json 数据生成动态表 我不想定义列 库应该读取 json 哈希中的键并生成列 当然 我可以自己迭代json数
  • 如何获取特定语言的 DBpedia 数据?

    我尝试了这个请求 但如果我想检索意大利语信息 还有其他服务 类似 可以吗 你可以使用dbpedia SPARQL 端点运行查询 例如 PREFIX rdfs
  • 在 Python 中跟踪被忽略的异常?

    我的应用程序有一个自定义音频库 它本身使用 BASS 库 我在整个程序中创建和销毁 BASS 流对象 当我的程序随机退出时 我还没有弄清楚模式 我在控制台上收到以下通知 Exception TypeError NoneType object
  • 16:跳过密码保存,因为可能会提示用户使用 Android 自动填充

    我正在将谷歌智能锁集成到我的 Android 应用程序中 但在某些设备中 当我尝试将凭据保存到谷歌时 我收到此错误 我正在使用以下代码来保存凭据 Credential credential new Credential Builder em
  • 我可以将签出的文件集成到 perforce 上的不同分支中吗

    我们正在进行设计 为此我们在主分支中创建了类的骨架 现在 我们开始编码 为此我们有了一个新分支 因此 如果我可以将主分支中的所有新文件移动到新分支中 那就太好了 但是 我还无法签入它们 那么 是否可以集成已签出的变更列表 谢谢 Perfor
  • 检查 smoothScrollToPosition 何时完成

    我想查一下什么时候smoothScrollToPosition已完成滚动回第一项recyclerview 我尝试这样做 只有当 smoothScrollToPosition 仍在滚动时才有效 recyclerView getLayoutMa
  • 将具有 IFormFile 属性的模型从 Angular2 上传到 ASP.NET Core Web Api

    我正在尝试发送模型 其中一部分是代表用户头像的 IFormFile 类型属性 但不幸的是 我的头像属性始终为空 我看到了很多如何发送单个图片元素的示例 但我可以找到当它是模型的一部分而不是完成时的单个元素时如何发送它的示例例如这里 这是我设
  • 使用 AAD 令牌在 Databricks 中创建 Azure Key Vault 支持的秘密范围

    我的最终目标是将 ADLS gen2 容器安装到我的 Databricks 工作区中 作为在 Azure 服务主体的支持下由 Terraform 管理的部署的一部分 这是一个单一部署 它创建所有 Azure 资源 网络 防火墙 存储帐户 D
  • CSS 箭头进度条

    我目前正在学习有关 css 的所有内容 因此我尝试生成具有不同功能的不同形状 我目前正在开发一个项目 该项目需要一个水平箭头来显示发生的事务的 进度 所以我试图生成一个箭头 进度条 例如 XX 10 gt the XX s depict a
  • 使用 Enzyme 测试窗口滚动事件处理程序的最佳方法是什么?

    我一直在与一个新团队一起开发 React 应用程序 讨论围绕为触发 window scroll 事件方法的组件编写单元测试进行 那么 我们以这个组件为例 import React Component from react class MyC
  • 来自 HTTP 客户端的 PUT 请求后收到“411 Length required”

    我正在开发一个实现 HTTP 客户端的 Java 程序 我测试它向服务器发送请求 GET POST 和 DELETE 请求工作正常 例如 在 POST 请求之后我得到一个输出 Data extracted status message ok
  • Nodejs 为什么await 只限于异步函数?

    可能重复的wait 仅在 async 函数中有效 我是新来的NodeJS我发现了这个概念async await有点混乱 经过一番阅读和摸索 这是我的理解 假设我有一个函数sum像这样 function sum a b print the n
  • 复制的重复文件(Android Studio 0.4.0)[重复]

    这个问题在这里已经有答案了 在我的项目中 我使用 Apache 的 httpcore 和 httpmime 库 将 Android Studio 更新到 0 4 0 后 我在构建项目时遇到了以下问题 Duplicate files copi
  • 用于更新查找表中向量的某些值的规范 tidyverse 方法

    我经常需要根据查找表重新编码数据框列中的一些 不是全部 值 我对我所知道的解决问题的方法不满意 我希望能够在清晰 稳定 高效方式 在编写自己的函数之前 我想确保我没有复制已经存在的标准 Toy example data data frame