通过R中的函数变换数据帧

时间:2018-02-01 17:18:41

标签: r function tidyverse

对不起基本问题,但我在这个论坛中找不到解决这个问题的例子。我已经尝试了this oneone

我想通过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名称是&#34; memo_re&#34; ,但我也会将此功能用于其他数据集,只需更改 x 论点。 R正在创建一个名为x 的新data.frame,而不是在&#34; memor_re&#34;中创建一个新变量。 (原始数据集)。换句话说,我想分配一个函数来做到这一点:

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)

1 个答案:

答案 0 :(得分:2)

Height: <input type="number" id="inputHeight" min="1" value="1"> Width: <input type="number" id="inputWidth" min="1" value="1"> <button id="makeGrid">MAKE</button> <br> Color: <input type="color" id="colorPicker"> <table id="pixelCanvas"></table>正在按照您的要求行事。在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()

请注意,我没有在任何地方使用crivo <- function(x) { x %>% mutate(resp_1 = if_else(MEMO_RE01 == 0,"VN","FP"), resp_2 = if_else(MEMO_RE02 == 1,"VP","FN")) } 运算符。因此,<<- fx将返回变异的crivo数据框,以便您可以执行

x

这样,您可以将任何想要的内容传递给new <- memo_re %>% crivo() 并将其分配给任何新变量。或者,如果您只想在crivo上调用该函数,也可以这样做:

memo_re

请注意,编写函数的“经典”方法是使用memo_re <- memo_re %>% crivo() 来指定fx返回的内容。如果您不使用return()(我上面没有),return()将返回最后一行中的内容。在这里,它只是变异数据帧。