将不带引号的列名传递给用户定义函数,以处理r中的NAs



我的函数将从用户获取数据和列名。
列名只能像这样传递:columnmy column(即没有")

在函数的部分,我需要检查该列中的缺失值并将其替换为"missed"。

myfun <- function(data, column){
library(tidyverse)
data <- as.tibble(data)
data %>%
mutate(across(.cols = {{column}}, .fns = as.character)) %>%
replace_na(list({{columns}} = "missed"))

}

new_df <- airquality %>%
myfun(Ozone)

我以前使用过{{}},我没有像上面的空气质量示例一样传递列名的问题。现在在实际函数的一部分,我需要替换na。上面的格式不适用于replace_na()。

有办法解决这个问题吗?

我认为您需要在mutate()中使用replace_na()。如果您使用与将列转换为字符相同的策略,则似乎可以解决问题:

myfun <- function(data, column){
library(tidyverse)
data <- as_tibble(data)
data %>%
mutate(across(.cols = {{column}}, .fns = ~ replace_na(as.character(.x), "missed")))

}

new_df <- airquality %>%
myfun(Ozone)

输出:

> head(new_df)
# A tibble: 6 × 6
Ozone  Solar.R  Wind  Temp Month   Day
<chr>    <int> <dbl> <int> <int> <int>
1 41         190   7.4    67     5     1
2 36         118   8      72     5     2
3 12         149  12.6    74     5     3
4 18         313  11.5    62     5     4
5 missed      NA  14.3    56     5     5
6 28          NA  14.9    66     5     6

最新更新