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
我有一个包含 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