我正在编写一个R脚本,我需要允许用户指定将手动处理的变量的名称,即
var <- 'user_name'
通常,我使用rlang::sym
和引用/取消引用机制来指代。但是,我需要使用tidyr::replace_na
并且我的想法在这里都没有奏效,因为必须在list
中指定变量的名称。
在这种情况下,我该如何参考我的var
?我在想下面这样的事情:
data <- data %>% replace_na(list(sym(var) = 0))
但是它没有用...
我们也可以把replace_na
放在mutate
里面并取消引用:
library(dplyr)
library(tidyr)
var <- 'user_name'
data %>%
mutate(!!var := replace_na(!!sym(var), 0))
结果:
user_name
1 0
2 1
3 2
4 3
5 4
6 5
数据:
data <- data.frame(user_name = c(NA, 1:5))
不使用除dplyr/tidyr
以外的任何外部包,我们可以用setNames
来更改它
library(dplyr)
library(tidyr)
data %>%
replace_na(as.list(setNames(0, var)))
# user_name
#1 0
#2 3
#3 4
数据
data <- data.frame(user_name = c(NA, 3, 4))