在R中的自定义ifelse()中调用数据变量

用户名

我正在尝试编写ifelse()要传递给的专用功能dplyr::mutate(across())该函数应将across()名称为的列中的NA值替换为名称相似的列中的NA值

例如在下面的虚构的数据,我想替换丢失x_var1y_var1和失踪x_var2y_var2

x <- tribble(~x_var1, ~x_var2, ~y_var1, ~y_var2,
             5, 2, 0, 0,
             NA, 10, 8, 0,
             3, NA, 0, 5,
             NA, NA, 7, 9)   

我试过构造以下函数:

ifelse_spec <- function(var) {
  new_var = paste("y_", str_remove(cur_column(), "x_"), sep = "")
 
  # print(new_var) # just to check new_var is correct 

  ifelse(is.na(var), !!sym(new_var) , var)  # how to call new_var?
}

x %>%
  mutate(across(c(x_var1, x_var2),
                ~ ifelse_spec(.)))

但它似乎不起作用。

但是,如果我ifelse直接使用这种单变量案例,则会得到预期的结果。

x %>% 
  mutate(across(c(x_var1),
                ~ifelse(is.na(.), !!sym("y_var1"), .)))

如何构造自定义的ifelse语句,该语句将允许我调用数据变量?

编辑:我有以下工作在多变量的情况下,但仍在使用ifelse而不是不同的功能。

x %>% 
  mutate(across(c(x_var1, x_var2),
                ~ifelse(is.na(.), eval(sym(paste("y_", str_remove(cur_column(), "x_"), sep = ""))), . )))
乔·罗

coalesce()专为解决此问题而设计(填充其他列中的缺失值)。您可以使用它来代替ifelse

library(dplyr, warn.conflicts = FALSE)
library(stringr)
library(purrr)

x <- tribble(~x_var1, ~x_var2, ~y_var1, ~y_var2,
             5, 2, 0, 0,
             NA, 10, 8, 0,
             3, NA, 0, 5,
             NA, NA, 7, 9)

x %>% 
  mutate(x_var1 = coalesce(x_var1, y_var1))
#> # A tibble: 4 x 4
#>   x_var1 x_var2 y_var1 y_var2
#>    <dbl>  <dbl>  <dbl>  <dbl>
#> 1      5      2      0      0
#> 2      8     10      8      0
#> 3      3     NA      0      5
#> 4      7     NA      7      9

然后,您可以用来select()将其概括化以在名称相似的列之间合并:

x %>% 
  mutate(x_var1 = do.call(coalesce, select(., ends_with("var1"))))
#> # A tibble: 4 x 4
#>   x_var1 x_var2 y_var1 y_var2
#>    <dbl>  <dbl>  <dbl>  <dbl>
#> 1      5      2      0      0
#> 2      8     10      8      0
#> 3      3     NA      0      5
#> 4      7     NA      7      9

最后,使用map_dfc将此功能应用于每列,使用模式匹配提取其所属的“列组”:

x %>% 
  colnames() %>% 
  str_extract("var[0-9]") %>% 
  set_names(colnames(x)) %>% 
  map_dfc(~do.call(coalesce, select(x, ends_with(.))))
#> # A tibble: 4 x 4
#>   x_var1 x_var2 y_var1 y_var2
#>    <dbl>  <dbl>  <dbl>  <dbl>
#> 1      5      2      5      2
#> 2      8     10      8     10
#> 3      3      5      3      5
#> 4      7      9      7      9

您将需要在实际数据中调整str_extract()ends_with()适应列名,但是我认为这应该推广到任何合理的命名方案。如果将自定义函数而不是应用于您的实际数据很重要coalesce(),那么也应该可以重写map_dfc()使用它。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在R中的自定义ifelse()中调用数据变量

来自分类Dev

在R中自定义数据框

来自分类Dev

如何从Firebase的自定义类函数中调用数据

来自分类Dev

r 自定义函数中的局部变量问题

来自分类Dev

在R中对数据框进行自定义排序

来自分类Dev

R 中数据帧中值的自定义排序

来自分类Dev

在简码中调用自定义函数

来自分类Dev

在Woocommerce中调用自定义图标

来自分类Dev

在自定义指令中调用服务

来自分类Dev

从活动中调用自定义片段

来自分类Dev

HockeyApp中自定义事件的自定义数据

来自分类Dev

自定义plist文件中的变量

来自分类Dev

for循环自定义中的范围变量

来自分类Dev

Word文档中的自定义变量

来自分类Dev

自定义python模块中的变量

来自分类Dev

如何在Codeigniter中调用自定义助手的自定义同级方法并使用数据库

来自分类Dev

在自定义键盘中存储数据

来自分类Dev

“数据:...”链接中的自定义名称

来自分类Dev

扩展中的数据视图自定义

来自分类Dev

在 AJAX 中添加自定义数据

来自分类Dev

在R中的嵌套数据框中多次调用ifelse

来自分类Dev

R Plotly中的自定义颜色

来自分类Dev

R中的自定义时间间隔

来自分类Dev

R:apply()中的自定义函数

来自分类Dev

自定义 R 中的排序函数

来自分类Dev

如何在Codeigniter中将数据库函数调用到自定义库中?

来自分类Dev

如何避免围绕Django自定义数据库函数调用的SQL中的括号?

来自分类Dev

在PHP中调用过程时的PLSQL自定义数据类型

来自分类Dev

在PHP中调用过程时的PLSQL自定义数据类型