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

艾曼

我正在尝试编写一个将包装的函数,并将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”。

然而:

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'

并且

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

错误:starts_with()必须在选择功能内使用我看到https://tidyselect.r-lib.org/reference/faq-selection-context.html运行rlang::last_error()以查看错误发生的位置。



coalesce_plus_3()

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

错误:mutate()输入问题coalesced_colx输入coalesced_col不能回收为5号。i输入coalesced_colcoalesce(c(col_a, col_b, col_c))i输入的coalesced_col大小必须为5或1,而不是15。

并且

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

错误:mutate()输入问题coalesced_colxstarts_with()必须在选择函数中使用。我看到https://tidyselect.r-lib.org/reference/faq-selection-context.html我输入coalesced_colcoalesce(all_of(starts_with("col")))

底线

如何为此编写一个自定义函数,coalesce()以将数据对象和特定的列名合并在一起,从而允许在函数的参数中同时使用特定的命名(例如)c(col_a, col_b, col_c)和辅助功能(例如)starts_with("col")vars

格雷戈尔·托马斯(Gregor Thomas)

这个简单的实现将只返回选择列,但是可以很容易地扩展为保留所有列(我将bind_cols它们放回最后...)。

很简单,因为我们依赖于select为我们做工作,如实施tidyselect小插图开始时所建议的那样

# 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

dplyr :: coalesce,但用于多行

来自分类Dev

Coalesce SQL 函数的参数限制?

来自分类Dev

使用 IS NULL 或 Coalesce 将参数传递给 where 子句

来自分类Dev

如何将dplyr中的动态列名传递给自定义函数?

来自分类Dev

使用COALESCE函数在变量中附加消息

来自分类Dev

NOT语句中的COALESCE函数不起作用

来自分类Dev

带有聚合函数的 COALESCE 和 NULLIF

来自分类Dev

BigQuery:Coalesce将TIMESTAMP转换为INTEGER

来自分类Dev

SAS和Coalesce函数插入缺少的日期值?

来自分类Dev

在Postgres 12 SQL存储函数中似乎未启动COALESCE

来自分类Dev

使用select的MYSQL中的COALESCE函数给出错误

来自分类Dev

在R中串联(使用sqldf时等同于COALESCE)

来自分类Dev

'。'附近的语法不正确 在使用Coalesce时

来自分类Dev

使用Order By时,COALESCE具有奇怪的TSQL行为

来自分类Dev

使用 COALESCE 连接时,大于 9 的数字显示为星号 *

来自分类Dev

将函数传递给自定义react钩子

来自分类Dev

将索引传递给自定义orderBy函数

来自分类Dev

Vim-我可以在不编写函数的情况下将多个args传递给自定义命令

来自分类Dev

如何在SQL中读取xml时将条件添加到COALESCE

来自分类Dev

为什么COALESCE对于单个列返回多个“无效列名”错误?

来自分类Dev

使用 SQL SERVER 2008 显示来自 COALESCE 结果的结果列名称?

来自分类Dev

MySQL查询:使用COALESCE时可以合并2个总数不同的记录。

来自分类Dev

当列不存在时,Postgres SUM 返回 0 行。COALESCE 和 ISNULL 不起作用

来自分类Dev

当 TIMESTAMP 列的值为 NULL 时,如何使用 COALESCE 返回“N/A”?

来自分类Dev

在 HIVE 中,使用 COALESCE 将 Null 值替换为相同的列值

来自分类Dev

将列名传递给使用 dplyr 函数的写入函数

来自分类Dev

React-Native Calendars:按下某一天时将日期传递给自定义函数

来自分类Dev

Elasticsearch中的COALESCE

来自分类Dev

COALESCE不起作用?

Related 相关文章

  1. 1

    dplyr :: coalesce,但用于多行

  2. 2

    Coalesce SQL 函数的参数限制?

  3. 3

    使用 IS NULL 或 Coalesce 将参数传递给 where 子句

  4. 4

    如何将dplyr中的动态列名传递给自定义函数?

  5. 5

    使用COALESCE函数在变量中附加消息

  6. 6

    NOT语句中的COALESCE函数不起作用

  7. 7

    带有聚合函数的 COALESCE 和 NULLIF

  8. 8

    BigQuery:Coalesce将TIMESTAMP转换为INTEGER

  9. 9

    SAS和Coalesce函数插入缺少的日期值?

  10. 10

    在Postgres 12 SQL存储函数中似乎未启动COALESCE

  11. 11

    使用select的MYSQL中的COALESCE函数给出错误

  12. 12

    在R中串联(使用sqldf时等同于COALESCE)

  13. 13

    '。'附近的语法不正确 在使用Coalesce时

  14. 14

    使用Order By时,COALESCE具有奇怪的TSQL行为

  15. 15

    使用 COALESCE 连接时,大于 9 的数字显示为星号 *

  16. 16

    将函数传递给自定义react钩子

  17. 17

    将索引传递给自定义orderBy函数

  18. 18

    Vim-我可以在不编写函数的情况下将多个args传递给自定义命令

  19. 19

    如何在SQL中读取xml时将条件添加到COALESCE

  20. 20

    为什么COALESCE对于单个列返回多个“无效列名”错误?

  21. 21

    使用 SQL SERVER 2008 显示来自 COALESCE 结果的结果列名称?

  22. 22

    MySQL查询:使用COALESCE时可以合并2个总数不同的记录。

  23. 23

    当列不存在时,Postgres SUM 返回 0 行。COALESCE 和 ISNULL 不起作用

  24. 24

    当 TIMESTAMP 列的值为 NULL 时,如何使用 COALESCE 返回“N/A”?

  25. 25

    在 HIVE 中,使用 COALESCE 将 Null 值替换为相同的列值

  26. 26

    将列名传递给使用 dplyr 函数的写入函数

  27. 27

    React-Native Calendars:按下某一天时将日期传递给自定义函数

  28. 28

    Elasticsearch中的COALESCE

  29. 29

    COALESCE不起作用?

热门标签

归档