所以这是我的问题的简化。 我有一个像这样的数据框:
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开始,我是一个新手。
答案 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
将它们应用到上面。