繁体   English   中英

通过R中的功能更改数据帧

[英]Mutate data frame via function in R

对不起这个基本问题,但是我找不到这个论坛中的示例来解决这个问题。 我已经试过这一个 ,这一个

我想通过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环境的x 这就是<<-运算符的作用。 运行代码后,使用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()返回某些内容,然后可以分配您想要的任何名称,则应该使用

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将返回变异的x数据帧,以便您可以

new <- memo_re %>% crivo()

这样,您就可以通过管道crivo任何想要crivo并将其分配给任何新变量。 另外,如果您只想在memo_re上调用该函数,也可以这样做:

memo_re <- memo_re %>% crivo()

请注意,编写函数的“经典”方法是使用return()来指定您希望fx返回的内容。 如果您不使用return() (如上所述), R将返回最后一行中的任何内容。 在这里,这只是变异数据框。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM