迭代地将新列添加到数据框列表中

Shu*_*wag 2 for-loop r list dataframe

我正在尝试编写一些迭代数据帧列表的代码,向每个数据帧添加一个新列,该新列包含与旧列相同的值,但移动了 1。该列中的第一个值将为 NA。下面是我的代码:

for(dataframe in 1:length(listOfDataFrames)){
    newColumn <- c(NA)
    for(row in 1:(nrow(listOfDataFrames[[dataframe]]) - 1)){
        newColumn <- append(newColumn, listOfDataFrames[[dataframe]]$oldColumn[row])
    }
    mutate(listOfDataFrames[[i]], newColumn = newColumn)
}
Run Code Online (Sandbox Code Playgroud)

但是,当我在 R 中执行此代码时,我在第一个数据帧上收到错误:

replacement has 894 rows, data has 895 
Run Code Online (Sandbox Code Playgroud)

什么可能导致此错误?抱歉,如果这是一个简单的问题,我不是 R 方面的专家。

谢谢你!

ags*_*udy 5

你的代码集中了在 R 中应该避免的事情:

  1. for当您可以使用lapply或更一般的 xxapply 家庭时,请勿使用。
  2. 不要在循环内附加 data.frame 的行。这非常低效。你应该预先分配。使用lapply将为你做。
  3. 不要使用$内部函数。你应该使用[运算符
  4. 当您可以以矢量化方式进行操作时,无需循环 data.frame。

这里我将如何做到这一点:

lapply(listOfDataFrames, function(DX){

        ## I assume that your DX has and "oldColum" variable
        transform(DX,newColumn =c(NA,head(oldColumn,-1))

})
Run Code Online (Sandbox Code Playgroud)