创建一个循环函数结果的数据框

时间:2020-06-26 08:26:14

标签: r

所以这是我的问题的简化。 我有一个像这样的数据框:

df <- data.frame(name=c("lucas","julio","jack","juan"),number=c(1,15,100,22)) 

我有一个为每个名称创建新值的函数,如下所示:

var_number <- function(x) {
  example <- df %>%
    filter(name %in% unique(df$name)[x]) %>% 
    select(-name) %>%
    mutate(value1=number/2^5, value2=number^5)
  (example)
}

var_number(1)
 0.03125 1

现在,每个名称都有两个新值,我想创建一个循环将每个结果保存到新的数据框中。 我知道如何解决此特定问题,但是我需要一个通用的解决方案,该解决方案允许我将所有函数的结果保存到数据框中。 我正在寻找一种自动的方法来做这样的事情:

result<- bind_rows(var_number(1),var_number(2),var_number(3),var_number(4))

因为我必须将var_number应用于1000次左右,并且每次执行测试时,长度都会改变。 无论如何,我可以做这样的事情吗?我当时在考虑用“ for”来做,但是我不确定如何去做,我刚从R开始,我是一个新手。

2 个答案:

答案 0 :(得分:1)

这回答了我的问题:

library(tidyverse) # contains purrr library

#an arbitrary function that always outputs a dataframe
# with a consistent number of columns, in this case 3
myfunc <- function(x){
data.frame(a=x*2,
         b=x^2,
         c=log2(x))
}

# iterate over 1:10 as inputs to myfunc, and
# combine the results rowwise into a df 
purrr::map_dfr(1:10,
           ~myfunc(.))

答案 1 :(得分:0)

为什么要为每个名称应用var_number函数,为每个名称创建一个新的数据框,然后将它们全部组合在一起?

在同一数据框中只能执行一次。

library(dplyr)

df1 <- df %>% 
         mutate(value1=number/2^5,value2=number^5) %>%
         select(-name)

如果您只想对特定的names执行此操作,则可以先filter将它们应用到上面。