将不带引号的列名传递给用户定义的函数以在 R 中使用 NA
passing column name without quotation marks to user defined function to work with NAs in R
我的函数将从用户那里获取数据和列名。
列名只能像这样传递:column
或 my column
(即,如果列名是多个单词,则没有 "" 仅反引号)
在我的部分功能中,我需要检查该列中的缺失值并将它们替换为“缺失”。
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 s 。上面的格式不适用于 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
我的函数将从用户那里获取数据和列名。
列名只能像这样传递:column
或 my column
(即,如果列名是多个单词,则没有 "" 仅反引号)
在我的部分功能中,我需要检查该列中的缺失值并将它们替换为“缺失”。
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 s 。上面的格式不适用于 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