如何编程n个步骤,其中每个步骤都是从上一步创建的数据帧?

时间:2019-05-13 13:17:36

标签: r dataframe

我尝试通过相互依赖的不同步骤来模拟数据帧中的更改。让我们尝试以一个非常简单的示例来说明我的问题。

我创建一个具有两列的数据框

a=runif(10)
b=runif(10)
data_1=data.frame(a,b)
data_1
            a          b
1  0.94922669 0.47418098
2  0.26702201 0.79179699
3  0.57398333 0.25158378
4  0.52724079 0.61531202
5  0.03999831 0.95233479
6  0.15171673 0.64564561
7  0.51353129 0.75676464
8  0.60312432 0.85318316
9  0.52900913 0.06297818
10 0.75459362 0.40209925

然后,我想创建n个步骤,其中每个步骤都包括在i + 1处创建一个新的数据帧,它是i处数据帧的功能(我们称之为“无论如何”):data_2是data_1的转换, data_3是data_2等的转换。

iterations=function(nsteps)
{
  lapply(1:nsteps,function(i)
  {  
  data_i+1=whatever(data_i)
  })

}

无论我使用什么功能,我都会看到一条错误消息:

Error in whatever(data_i) : object 'data_i' not found 

有人可以帮我弄清楚我所缺少的吗?

2 个答案:

答案 0 :(得分:0)

看看是否可以从以下示例中得到启发。
首先,将whatever函数应用于上一个数据帧。

whatever <- function(DF) {
  DF[[2]] <- DF[[2]]*2
  DF
}

现在要使用的功能。我添加了一个额外的参数,数据框x
该函数从创建要返回的对象开始。列表data_list中的每个成员都是上一个数据框的数据框功能。

iterations <- function(nsteps, x){
  data_list <- vector("list", length = nsteps)
  data_list[[1]] <- x
  for(i in seq_len(nsteps)[-1]){
    data_list[[i]] <- whatever(data_list[[i - 1]])
  }
  names(data_list) <- sprintf("data_%d", seq_len(nsteps))
  data_list
}

并将iterations应用于示例数据框。

df1 <- data.frame(A = letters[1:10], X = 1:10)

iterations(10, df1)

答案 1 :(得分:0)

您可能正在寻找assignpaste的组合:

assign(paste("data_", i + 1, sep = ""), whatever(data_i))