当前位置: 首页 > 知识库问答 >
问题:

将变量名传递到dplyr 1.1.0中mutate()函数的左侧[重复]

田永春
2023-03-14
library(dplyr)
library(forcats)

# toy data
df <- tibble(d_1_a = factor(c(letters[1:5],NA,NA)),
             d_1_b = factor(c(NA,NA,letters[1:5])))
muteFunct <- function(d, i) {
  d %>% mutate(newFact = forcats::fct_explicit_na(.data[[i]]))
}

muteFunct(df, "d_1_a")

# output
#   d_1_a d_1_b newFact  
#   <fct> <fct> <fct>    
# 1 a     NA    a        
# 2 b     NA    b        
# 3 c     a     c        
# 4 d     b     d        
# 5 e     c     e        
# 6 NA    d     (Missing)
# 7 NA    e     (Missing)
muteFunct2 <- function(d, i) {
  d %>% mutate(!!.data[[i]] := forcats::fct_explicit_na(.data[[i]]))
}

muteFunct2(df, "d_1_a")
Error: The LHS of `:=` must be a string or a symbol
Run `rlang::last_error()` to see where the error occurred. 

共有1个答案

须衡虑
2023-03-14

LHS中,我们可以传递字符串并进行赋值(:=)。由于i传递的是列名,所以只需执行!!i:=

muteFunct2 <- function(d, i) {
   d %>%
     mutate(!! i:= forcats::fct_explicit_na(.data[[i]]))
 }

-测试

muteFunct2(df, "d_1_a")
# A tibble: 7 x 2
  d_1_a     d_1_b
  <fct>     <fct>
1 a         <NA> 
2 b         <NA> 
3 c         a    
4 d         b    
5 e         c    
6 (Missing) d    
7 (Missing) e    

为了更新现有的列,我们还可以使用。其优点是它也可以包含多个列

muteFunct2 <- function(d, i) {
   d %>%
     mutate(across(all_of(i),  ~ forcats::fct_explicit_na(.)))
 }
muteFunct2(df, "d_1_a")
muteFunct2(df, names(df))
# A tibble: 7 x 2
  d_1_a     d_1_b    
  <fct>     <fct>    
1 a         (Missing)
2 b         (Missing)
3 c         a        
4 d         b        
5 e         c        
6 (Missing) d        
7 (Missing) e       
 类似资料:
  • 我正在尝试使用对每一行执行一个函数并创建一个考虑多列的新列,我最初使用的是,但速度非常慢。我希望我的自定义函数中的列列表是一个变量,但除非显式地列出变量名,否则无法使其工作。例如,这是可行的: 但如果我希望它使用列输入作为vars进行计算:

  • 我是的新用户,我想回忆不同变量的代码块,我想做如下事情: 这里的都是中的变量。如果我调用,这部分就可以工作了。但是,我调用的方式仍然没有告诉这个函数group by是由完成的。我怎么让它工作?

  • 问题内容: 在C / C++中,我经常发现在调试定义一个宏时很有用,例如,该宏可以打印出变量名及其值(即可以打印)。您可以使用“字符串化操作符的宏来得到变量名描述这里。有没有办法在Python中做到这一点? 换句话说,我想要一个功能 如果称为(或可能),它将打印出来。我意识到如果将变量及其名称都传递给函数,这样做很简单,但是我在调​​试时经常使用类似这样的函数,重复总是使我很烦。 问题答案: 并不

  • 问题内容: 如果我有 我如何在内部找出现在由表示的变量称为? 问题答案: 这是不可能的。即使是按引用传递也不会帮助您。您必须将名称作为第二个参数传递。 但是,您肯定要问的 不是 解决问题的好方法。

  • 我有一个html文件thymeleaf,它有一个从控制器传递过来的变量,我需要将该变量传递给外部javascript文件上的函数。我该怎么做? 我可以得到这样的变量 我需要把这个id传递给里面的函数 那里有一个函数:

  • 在一个DOM操作练习中,我学习了如何使用纯JavaScript创建HTML元素。也就是像这样的东西: 我必须创建一个函数,允许用户将对象作为参数传入,以设置元素的属性。这个对象包含任意数量的键(属性)和值(属性值)。即属性可以是“src”,值可以是“image.jpg”。类似的东西。用户可以在调用函数时向此对象传递任意多的属性。 附带说明,对代码和JS都很新,请原谅我:P