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

时间:2015-06-20 00:01:53

标签: r list for-loop 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)
}

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

replacement has 894 rows, data has 895 

可能导致此错误的原因是什么?对不起,如果这是一个简单的问题,我不是R的专家。

谢谢!

1 个答案:

答案 0 :(得分:3)

您的代码是R

应避免的内容集中
  1. 当您可以使用for或更多属性xxapply系列时,请不要使用lapply
  2. 不要在循环中追加data.frame的行。这非常低效。你应该预先分配。使用lapply将为您完成。
  3. 不要在函数内部使用$。您应该使用[运算符
  4. 当您可以以矢量化方式执行时,无需遍历data.frame。
  5. 我将如何做到这一点:

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