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.
在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