编写自定义函数时将列名称传递给 dplyr::coalesce()

2023-12-13

我正在尝试编写一个将包装的函数dplyr::coalesce(),并将接受数据对象和列名称来合并。到目前为止,我的尝试都失败了。

示例数据

library(dplyr)

df <-
  data.frame(col_a = c("bob", NA, "bob", NA, "bob"), 
                 col_b = c(NA, "danny", NA, NA, NA), 
                 col_c = c("paul", NA, NA, "paul", NA))

##   col_a col_b col_c
## 1   bob  <NA>  paul
## 2  <NA> danny  <NA>
## 3   bob  <NA>  <NA>
## 4  <NA>  <NA>  paul
## 5   bob  <NA>  <NA>

编写自定义函数的存根

coalesce_plus_1 <- function(data, vars) {

  data %>%
    mutate(coalesced_col = coalesce(!!! rlang::syms(tidyselect::vars_select(names(.), vars))))

}
coalesce_plus_2 <- function(data, vars) {
  
  data %>%
    mutate(coalesced_col = coalesce(!!! rlang::syms(vars)))
  
}
coalesce_plus_3 <- function(data, vars) {
  
  data %>%
    mutate(coalesced_col = coalesce({{ vars }}))
  
}

结果...

coalesce_plus_1()

df %>%
  coalesce_plus_1(data = ., vars = c(col_a, col_b, col_c))

错误:找不到对象“col_a”。

However:

df %>%
  coalesce_plus_1(data = ., vars = all_of(starts_with("col")))

##   col_a col_b col_c coalesced_col
## 1  <NA>  <NA>  paul          paul
## 2  <NA> danny  <NA>         danny
## 3   bob  <NA>  <NA>           bob
## 4  <NA>  <NA>  paul          paul
## 5   bob  <NA>  <NA>           bob


coalesce_plus_2()

df %>%
  coalesce_plus_2(data = ., vars = c(col_a, col_b, col_c))

lapply(.x, .f, ...) 中的错误:找不到对象“col_a”

And also

df %>%
  coalesce_plus_2(data = ., vars = all_of(starts_with("col")))

Error: starts_with()必须在一个时间内使用选择功能。 我懂了https://tidyselect.r-lib.org/reference/faq-selection-context.html. Run rlang::last_error()查看错误发生的位置。



coalesce_plus_3()

df %>%
  coalesce_plus_3(data = ., vars = c(col_a, col_b, col_c))

错误:有问题mutate() input coalesced_col。 x 输入coalesced_col无法回收到尺寸 5。 i 输入coalesced_col is coalesce(c(col_a, col_b, col_c))。我输入coalesced_col必须是 尺码 5 或 1,而不是 15。

And also

df %>%
  coalesce_plus_3(data = ., vars = all_of(starts_with("col")))

错误:有问题mutate() input coalesced_col. x starts_with()必须在一个时间内使用选择功能。 我懂了https://tidyselect.r-lib.org/reference/faq-selection-context.html。 我输入coalesced_col is coalesce(all_of(starts_with("col"))).

底线

我如何编写自定义函数coalesce()它将接受数据对象和特定的列名来合并,允许特定的命名,例如,c(col_a, col_b, col_c)和辅助函数,例如,starts_with("col")在函数的vars争论?


这是一个简单的实现,只会返回选择的列,但可以相当容易地扩展以保留所有列(我会bind_cols他们最后又回来了……)。

很简单,因为我们依赖select为我们做这项工作,正如本文开头所建议的那样实施 tidyselect vignette

# edited to keep all columns
coalesce_df = function(data, ...) {
  data %>%
    select(...) %>%
    transmute(result = invoke(coalesce, .)) %>%
    bind_cols(data, .)
}



df %>%
   coalesce_df(everything())
#   col_a col_b col_c result
# 1   bob  <NA>  paul    bob
# 2  <NA> danny  <NA>  danny
# 3   bob  <NA>  <NA>    bob
# 4  <NA>  <NA>  paul   paul
# 5   bob  <NA>  <NA>    bob

df %>% coalesce_df(col_a, col_b)
#   col_a col_b col_c result
# 1   bob  <NA>  paul    bob
# 2  <NA> danny  <NA>  danny
# 3   bob  <NA>  <NA>    bob
# 4  <NA>  <NA>  paul   <NA>
# 5   bob  <NA>  <NA>    bob
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写自定义函数时将列名称传递给 dplyr::coalesce() 的相关文章

  • 如何计算满足条件的行数

    假设我有以下数据框 Data1 X1 X2 1 15 1 2 3 1 3 7 0 4 11 1 5 1 0 6 9 0 7 18 0 8 6 1 9 3 1 我想知道如何找到观察的总数X1大于 9 并且X2等于1 我想我需要使用sum 但我
  • knn-相同的k,不同的结果

    我有一个矩阵ZZ 我跑完之后prcomp并选择了我收到的前 5 台电脑data new P prcomp zz data new P x 1 5 然后我分成训练集和测试集 pca train data new 1 121 pca test
  • 为什么使用 staticmethod 而不是根本不使用装饰器

    关于为什么 何时应该使用类方法与静态方法 有几个很好的解释 但我无法找到何时使用静态方法而不使用任何装饰的答案 考虑一下这个 class Foo object staticmethod def f static x print static
  • 列表列表中出现的频率

    我有一个列表列表 其中每个列表都已排序 我想调查的是某个元素在特定位置出现了多少次 例如 pnc 曾两次出现在第二位 一次出现在第三位 我的数据结构如下 dput degree l list c schwab 0 pnc 0 0344827
  • 将角色分成几部分

    我观察到以下特征 l lt mod range1 seq m n 0 1 range2 seq 2 2 0 1 range3 seq 2 2 0 1 在 R 中使用正则表达式我想要拆分l在以下结构中 1 mod range1 seq m n
  • 在另一个函数中定义一个函数的优雅方式

    我想构建 f lt function g lt function x x 2 list 这样我就可以使用调用f g 4 并有list 导致list 16 一般来说我会在里面定义几个临时函数f用户在调用时可以调用f 我已经尝试过assign
  • 如何在双对数图(ggplot2)中添加趋势线?

    我需要绘制一个遵循幂律分布的数据向量 所以如果我将它们绘制在对数轴上 它们将是一条直线 但是 如果我没有明确提供 y 参数 我不知道如何绘制 这是代码 library poweRlaw library ggplot2 xmin 1 alph
  • 使用 ggplot 将条形图的列与线图的点对齐

    当线图的点与条形图的条具有相同的 x 轴时 有什么方法可以使用 ggplot 将它们对齐 这是我尝试使用的示例数据 library ggplot2 library gridExtra data data frame x rep 1 27 e
  • 如何删除括号内的值的行?

    我正在使用以下数据框 Name Height Eric 64 Joe 67 Mike 66 Nick 72 Dave 69 Steve 73 我想删除 名称 列以左括号 开头的所有行 因此最终的数据框如下所示 Name Height Eri
  • Realloc 和 sscanf 到一个函数中

    我有一个文件 里面有num行 每一行包含一个数字 我想将每个数字保存到一个向量中 vet 为什么这段代码不起作用 Segmentation fault core dumped 我认为错误是sscanf in save numbers功能 但
  • 将 XML 的所有字段(和子字段)导入为数据框

    为了进行一些分析 我想使用 R 和 XML 包将 XML 导入数据帧 XML 文件示例
  • 将日期刻度添加到 R 中的 ggplot

    我试图在此图中的 x 轴上添加刻度以显示一年中的所有月份 我的代码如下 library ggplot2 library scales p lt ggplot df test aes time reading p geom point alp
  • 在 Microsoft Windows 上安装 RQuantLib

    我需要安装R包RQuantLib在 Microsoft Windows 计算机上 这个包没有二进制文件 所以我下载了 tar 源 我打开它 它包含 QuantLib C 库 所以我需要编译这个包 我不想安装 Visual Studio 我使
  • 在 Haskell 中,如何将嵌套上下文中的函数“应用”到上下文中的值?

    nestedApply Applicative f Applicative g gt g f a gt b gt f a gt g f b 正如类型所示 如何获得 a gt b 应用于那个a在上下文中f 感谢帮助 这是关注类型很有帮助的情况
  • R tidyr regex:从字符列中提取有序数字

    假设我有一个像这样的数据框 df lt data frame x c This script outputs 10 visualizations This script outputs 1 visualization This script
  • 使用 geom_abline() 和 ggplot

    我是初学者ggplot2 距离我开始试验才过去 4 天 所以 如果这个问题听起来太基本了 我深表歉意 我很感激任何指导 我已经在这个问题上苦苦挣扎了大约一个小时 我正在尝试使用geom abline 如下 p lt ggplot mpg a
  • 三角形内的热图

    考虑以下示例 triangle lines lt data frame X c 0 0 1 1 0 5 0 5 Y c 0 0 0 0 1 1 grp c 1 2 1 3 2 3 df lt matrix c c 0 2 0 5 0 8 c
  • 如何更改 R Markdown HTML 文档中目录的颜色和属性?

    我花了很多时间谷歌搜索这个 但似乎无法弄清楚 我正在使用 R Markdown 制作 HTML 文档 文档在这里 http rmarkdown rstudio com html document format html http rmark
  • 将类型信息传递给 Scala 中的函数

    我有对 json 对象执行一些常见操作的代码 即提取 所以我想创建一个通用函数 它接受哪个类的类型参数 代码如下所示 def getMessageType T json JValue Either GenericError T try Ri
  • 获得各州的边界

    编辑7 经过相当多的帮助后 我已经能够得到一张接近我需要的结果的地图 但我仍然需要在地图上显示州边界 但我无法弄清楚 为了制作一个合适的可重现示例 我需要链接到数据集 因为输出太大 为了使事情变得简单 我只对三个状态进行子集化 但边界线不显

随机推荐

  • Spring事务管理器(注解风格)运行时错误

    所以本质上 当我在 glassfish 应用程序服务器中加载战争时 我遇到了异常 我正在将 Spring 的事务管理器与我的 mysql 数据库一起使用 报告的错误 完整堆栈跟踪 如下 java lang Exception java la
  • 如何使用支持 Futures 的超级块的 Serde 零拷贝反序列化来存储结果?

    我正在使用 futures tokio hyper 和 serde json 来请求和反序列化一些需要保留到下一个请求的数据 我最初的想法是制作一个包含hyper Chunk以及借用的反序列化数据Chunk 但无法获得正确的生命周期 我尝试
  • localhost 无法解析为 127.0.0.1

    我打电话给Inet4Address getByName localhost 期待看到127 0 0 1 但我看到我的 IP 分配给了我的以太网 机场 如果我断开以太网 机场 我将得到以下解决方案127 0 0 1 但一旦我再次连接 它就会解
  • 检测来电

    我需要确定来电何时到达 我知道 如果用户接听电话 则将调用 applicationWillTerminate 而当出现带有通话确认消息的弹出窗口时 将调用 applicationWillResignActive 但是 application
  • 是否可以通过 JavaScript 关闭浏览器窗口?

    我希望能够使用 JavaScript 关闭浏览器窗口 这可能吗 window close
  • 在 R 中更改数据框列类的最佳方法

    这又是一个看似简单的问题 但是 我在 R 中有一个名为 d1 的小数据框 1 2 1 SHY 75000 2 IGLIX 25000 我想做的就是将第 2 列中的字符转换为数字 经过一个小时的摆弄后 我能弄清楚有效的是 a lt data
  • Glassfish 部署错误“无法识别 MyProject.jar 的存档类型”

    我创建了一个动态 Web 应用程序 我想用 glassfish 部署它 我已成功将源代码构建到 MyProject jar 但是当我部署它时 显示以下错误 远程故障 无法识别 home davenlin MyProject build My
  • 通过Spring MVC上传二进制文件到MySQL的正确方法

    我正在尝试将文件上传到 MySQL 但是我无法正确执行此操作 我正在使用云平台将 Java Spring 应用程序作为网站运行 控制器 byte bytes file getBytes file is MultipartFile DFile
  • 将变量传递到示例部分[重复]

    这个问题在这里已经有答案了 我设置了两个变量 假设在一个功能中 cityA New York 和 cityB Las Vegas 并将它们 导出 def表达 现在我想在另一个功能中使用这些变量 Scenario Outline Succes
  • Oracle sql查询按日期对连续记录进行分组

    使用下面的示例数据 我尝试以相同的速率对记录进行分组 id start date end date rate 1 01 01 2017 12 00 00 am 01 01 2017 12 00 00 am 300 1 02 01 2017
  • 为bazel、android tensorflow设置targetSdkVersion和compileSdkVersion

    我需要帮助如何为 bazel 设置目标和单独编译 Sdk 版本 我想在手机上运行tensorflowthis教程 编辑 bazel 的 WORKSPACE 后如下 android sdk repository name androidsdk
  • 加快 PLY 文件读取速度

    目前 我在 MATLAB 中使用以下代码段将 PLY 读入 MATLAB 矩阵 这是一个示例 PLY 文件 但当PLY文件很大时 需要相当长的时间 有没有更好的方法在 MATLAB 中高效读取文本文件 data textread fileN
  • Spring:标准日志方面(拦截器)

    我发现了很多关于如何使用 Spring 框架创建自定义方面进行日志记录的示例 例如this or this但没有找到这种情况和问题的标准 通用 Spring 实现 Spring 是否有日志记录方面的标准实现 是的 有
  • 如何在 Ubuntu 11.10 上编译 OpenJDK 7 调试版本

    我在哪里可以找到一组简单的指令来编译OpenJDKUbuntu 11 10 Oneiric 上的 7 调试版本 调试版本将使更多 JVM 选项可用于故障排除 例如 WizardMode The 开发者指南 and 构建自述文件有很多噪音并且
  • Python 类型错误问题

    我正在编写一个简单的程序来帮助为我所属的游戏生成订单 它属于我实际上不需要的程序类别 但现在我已经开始了 我希望它能发挥作用 一切都运行得很顺利 但我不知道如何阻止大约一半时发生的类型错误 这是代码 status 1 print b u m
  • 将每行的最后一个非零元素设置为零 - NumPy

    我有一个数组A A array 1 2 3 4 5 6 7 0 8 9 0 0 我想将每行的最后一个非零更改为 0 A array 1 2 3 0 5 6 0 0 8 0 0 0 如何为任何 n m numpy 数组编写代码 谢谢 S 方法
  • 使用 Java 配置在 Spring 中重定向 404 错误

    如您所知 在 XML 中 配置方法是
  • Java 对象的“相同性”是如何定义的?

    我想将自定义类型的对象添加到集合中 我有几个相同的 即它们的公共变量具有相同的值 我不希望将 同一 对象的多个实例添加到集合中 但每次创建新对象时 总是会添加它 这是因为 Object 类的 equals 方法在对象上实现了最具辨别力的可能
  • 禁用线性布局内的所有编辑文本

    我正在尝试禁用线性布局内的所有字段 该线性布局中有许多 edittext 和 textview 但是 我只是想禁用 edittext 我能够禁用所有孩子 但我希望能够禁用编辑文本 有什么办法可以做到这一点吗 Where ll是你的线性布局
  • 编写自定义函数时将列名称传递给 dplyr::coalesce()

    我正在尝试编写一个将包装的函数dplyr coalesce 并将接受数据对象和列名称来合并 到目前为止 我的尝试都失败了 示例数据 library dplyr df lt data frame col a c bob NA bob NA b