通过 R 中的函数改变数据框
Mutate data frame via function in R
抱歉这个基本问题,但我在这个论坛找不到解决这个问题的例子。我试过了 this one and this one.
我想通过 R 和 tidyverse 中的函数在我的 data.frame 中更改/创建一个新变量:
示例:
crivo <- function(x) {
x <<- x %>%
mutate(resp_1 = if_else(MEMO_RE01 == 0,"VN","FP")) %>%
mutate(resp_2 = if_else(MEMO_RE02 == 1,"VP","FN"))
}
crivo(memo_re)
我的 data.frame 名称是 "memo_re",但我也会将此函数用于其他数据集,只需更改 x 参数。 R 正在创建一个名为 x 的新 data.frame,而不是在 "memor_re"(原始数据集)中创建一个新变量。换句话说,我想分配一个函数来做到这一点:
memo_re <- memo_re %>% mutate(resp_1 = if_else(MEMO_RE01 == 0,"VN","FP"))
但我需要更改许多数据集,因此,我希望能够指定要更改的数据集。
可重现的代码
library(tidyverse)
memo_re <- data.frame(MEMO_RE01=rep(c(0,1),100), MEMO_RE02=c(0,1))
crivo <- function(x) {
x <<- x %>%
mutate(resp_1 = if_else(MEMO_RE01 == 0,"VN","FP")) %>%
mutate(resp_2 = if_else(MEMO_RE02 == 1,"VP","FN"))
}
crivo(memo_re)
R
正在做您要求它做的事情。在您的 crivo
函数定义中,您已将函数编写为 分配 您创建的名为 x
的新数据框到 R
环境.这就是 <<-
运算符所做的。在 运行 你的代码之后,使用 ls()
查看你的环境中有什么,然后查看 x
。你会看到一切都在那里,就像你要求的那样,包括正确的变异 x
数据框。
> memo_re <- data.frame(MEMO_RE01=rep(c(0,1),100), MEMO_RE02=c(0,1))
>
> crivo <- function(x) {
+ x <<- x %>%
+ mutate(resp_1 = if_else(MEMO_RE01 == 0,"VN","FP")) %>%
+ mutate(resp_2 = if_else(MEMO_RE02 == 1,"VP","FN"))
+ }
> crivo(memo_re)
> ls()
[1] "crivo" "memo_re" "x"
> head(x)
MEMO_RE01 MEMO_RE02 resp_1 resp_2
1 0 0 VN FN
2 1 1 FP VP
3 0 0 VN FN
4 1 1 FP VP
5 0 0 VN FN
6 1 1 FP VP
现在,如果您想要 crivo()
return 可以分配任何名称的东西,您应该使用
crivo <- function(x) {
x %>%
mutate(resp_1 = if_else(MEMO_RE01 == 0,"VN","FP"),
resp_2 = if_else(MEMO_RE02 == 1,"VP","FN"))
}
请注意,我没有在任何地方使用过 <<-
运算符。结果,crivo
fx 将 returning 突变的 x
数据帧,这样你就可以
new <- memo_re %>% crivo()
这样,您可以通过管道将任何您想要的内容 crivo
分配给任何新变量。或者,如果您只想调用 memo_re
上的函数,您也可以这样做:
memo_re <- memo_re %>% crivo()
请注意,"classic" 编写函数的方法是使用 return()
指定您想要的 fx 到 return。如果你不使用 return()
(我上面没有使用),R
将 return 最后一行中的任何内容。在这里,它只是变异数据框。
抱歉这个基本问题,但我在这个论坛找不到解决这个问题的例子。我试过了 this one and this one.
我想通过 R 和 tidyverse 中的函数在我的 data.frame 中更改/创建一个新变量:
示例:
crivo <- function(x) {
x <<- x %>%
mutate(resp_1 = if_else(MEMO_RE01 == 0,"VN","FP")) %>%
mutate(resp_2 = if_else(MEMO_RE02 == 1,"VP","FN"))
}
crivo(memo_re)
我的 data.frame 名称是 "memo_re",但我也会将此函数用于其他数据集,只需更改 x 参数。 R 正在创建一个名为 x 的新 data.frame,而不是在 "memor_re"(原始数据集)中创建一个新变量。换句话说,我想分配一个函数来做到这一点:
memo_re <- memo_re %>% mutate(resp_1 = if_else(MEMO_RE01 == 0,"VN","FP"))
但我需要更改许多数据集,因此,我希望能够指定要更改的数据集。
可重现的代码
library(tidyverse)
memo_re <- data.frame(MEMO_RE01=rep(c(0,1),100), MEMO_RE02=c(0,1))
crivo <- function(x) {
x <<- x %>%
mutate(resp_1 = if_else(MEMO_RE01 == 0,"VN","FP")) %>%
mutate(resp_2 = if_else(MEMO_RE02 == 1,"VP","FN"))
}
crivo(memo_re)
R
正在做您要求它做的事情。在您的 crivo
函数定义中,您已将函数编写为 分配 您创建的名为 x
的新数据框到 R
环境.这就是 <<-
运算符所做的。在 运行 你的代码之后,使用 ls()
查看你的环境中有什么,然后查看 x
。你会看到一切都在那里,就像你要求的那样,包括正确的变异 x
数据框。
> memo_re <- data.frame(MEMO_RE01=rep(c(0,1),100), MEMO_RE02=c(0,1))
>
> crivo <- function(x) {
+ x <<- x %>%
+ mutate(resp_1 = if_else(MEMO_RE01 == 0,"VN","FP")) %>%
+ mutate(resp_2 = if_else(MEMO_RE02 == 1,"VP","FN"))
+ }
> crivo(memo_re)
> ls()
[1] "crivo" "memo_re" "x"
> head(x)
MEMO_RE01 MEMO_RE02 resp_1 resp_2
1 0 0 VN FN
2 1 1 FP VP
3 0 0 VN FN
4 1 1 FP VP
5 0 0 VN FN
6 1 1 FP VP
现在,如果您想要 crivo()
return 可以分配任何名称的东西,您应该使用
crivo <- function(x) {
x %>%
mutate(resp_1 = if_else(MEMO_RE01 == 0,"VN","FP"),
resp_2 = if_else(MEMO_RE02 == 1,"VP","FN"))
}
请注意,我没有在任何地方使用过 <<-
运算符。结果,crivo
fx 将 returning 突变的 x
数据帧,这样你就可以
new <- memo_re %>% crivo()
这样,您可以通过管道将任何您想要的内容 crivo
分配给任何新变量。或者,如果您只想调用 memo_re
上的函数,您也可以这样做:
memo_re <- memo_re %>% crivo()
请注意,"classic" 编写函数的方法是使用 return()
指定您想要的 fx 到 return。如果你不使用 return()
(我上面没有使用),R
将 return 最后一行中的任何内容。在这里,它只是变异数据框。