diff() 应用于数据帧列表后替换和数据行的数量不同

Different number of replacement and data rows after diff() applied to list of dataframes

我有一个包含 993 个元素的列表,每个元素包含七个具有不同观测值的变量。此列表是通过拆分数据框创建的。

我需要将 diff() 函数应用于元素中的一个变量。但是,当我尝试时,R 给我以下错误:

Error in [[<-.data.frame(*tmp*, "DiffINT", value = c(1.02, 0, 0, 0, : replacement has 30 rows, data has 34

以下是我正在使用的循环。

 for (i in 1:993){
   ONT.list[[i]][["DiffINT"]] <- diff(ONT.list[[i]][["INTprice"]], lag = 4)
 }

DiffINT 变量包含与元素中其余变量一样多的行,并且当前用 NA 填充。我的 objective 是将前 4 个 NA 保留在那里,因为数据应该滞后。

欢迎就如何解决此错误或更有效地操作列表中的元素提出任何建议。提前致谢!

编辑: 感谢评论者的帮助,添加 4 个 NA 成功了! 但是在继续循环的过程中,又出现了一个新的问题:当行长小于4时。

Error in [[<-.data.frame(*tmp*, "DiffINT", value = c(NA_real_, NA_real_, : replacement has 4 rows, data has 2

建议?

编辑 2:

知道了。添加了 if 语句。

 for (i in 1:993) {
   if (length(ONT.list[[i]][["INTprice"]]) >= 4)
   ONT.list[[i]][["DiffINT"]] <- c(rep(NA,4),diff(ONT.list[[i]]
   [["INTprice"]], lag = 4))
 }

再次感谢大家

我相信以下内容可以解决您遇到的最后一个错误。
请注意,此答案中重要的是循环,而不是确切的数据结构。

set.seed(1234)    # make the results reproducible
ONT.list <- list(data.frame(INTprice = rnorm(2)),
                 data.frame(INTprice = rnorm(4)),
                 data.frame(INTprice = rnorm(5)),
                 data.frame(INTprice = rnorm(20))
)

for(i in seq_along(ONT.list)){
  n <- nrow(ONT.list[[i]])
  d <- diff(ONT.list[[i]][["INTprice"]], lag = 4)
  ONT.list[[i]][["DiffInt"]] <- c(rep(NA, pmin.int(4, n - length(d))), d)
}

ONT.list