表1- KT
Quantity 2020-09-04 2020-09-05 2020-09-06 2020-09-07 2020-09-08
832 1 1 2 2 1
30 1 1 2 2 1
40 1 1 2 2 1
54 1 1 2 2 1
30 1 1 2 2 1
表2- FT
2020-09-03 2020-09-04 2020-09-05 2020-09-06 2020-09-07 2020-09-08
1600 NA NA NA NA NA
2000 NA NA NA NA NA
435 NA NA NA NA NA
568 NA NA NA NA NA
800 NA NA NA NA NA
for(i in seq_along(FT1)){
FT1[i+1] <- FT1[,i] - (KT[c("Quantity")] * KT[[i+1]])
}
输出表
2020-09-03 2020-09-04 2020-09-05 2020-09-06 2020-09-07 2020-09-08
1600 768 -64 -1728 -3392 -4224
2000 1970 1940 1880 1820 1790
435 395 355 275 195 155
568 514 460 352 244 190
800 770 740 680 620 590
它返回输出表,但是.subset2(x,i,确切=精确)中出现错误:下标超出范围
在For循环后收到此错误
>如何清除此错误
答案 0 :(得分:1)
这里我们需要索引为
for(i in 2:ncol(FT)) FT[, i] <- FT[, i-1] - KT$Quantity * KT[[i]]
FT
# 2020-09-03 2020-09-04 2020-09-05 2020-09-06 2020-09-07 2020-09-08
#1 1600 768 -64 -1728 -3392 -4224
#2 2000 1970 1940 1880 1820 1790
#3 435 395 355 275 195 155
#4 568 514 460 352 244 190
#5 800 770 740 680 620 590
KT <- structure(list(Quantity = c(832L, 30L, 40L, 54L, 30L), `2020-09-04` = c(1L,
1L, 1L, 1L, 1L), `2020-09-05` = c(1L, 1L, 1L, 1L, 1L), `2020-09-06` = c(2L,
2L, 2L, 2L, 2L), `2020-09-07` = c(2L, 2L, 2L, 2L, 2L), `2020-09-08` = c(1L,
1L, 1L, 1L, 1L)), class = "data.frame",
row.names = c(NA, -5L
))
FT <- structure(list(`2020-09-03` = c(1600L, 2000L, 435L, 568L, 800L
), `2020-09-04` = c(NA, NA, NA, NA, NA), `2020-09-05` = c(NA,
NA, NA, NA, NA), `2020-09-06` = c(NA, NA, NA, NA, NA), `2020-09-07` = c(NA,
NA, NA, NA, NA), `2020-09-08` = c(NA, NA, NA, NA, NA)),
class = "data.frame", row.names = c(NA,
-5L))
答案 1 :(得分:1)
您也可以在循环中尝试此修改:
#Loop
for(i in 1:(dim(FT1)[2]-1)){
FT1[,i+1] <- FT1[,i] - (KT[c("Quantity")] * KT[[i+1]])
}
哪个输出:
X2020.09.03 X2020.09.04 X2020.09.05 X2020.09.06 X2020.09.07 X2020.09.08
1 1600 768 -64 -1728 -3392 -4224
2 2000 1970 1940 1880 1820 1790
3 435 395 355 275 195 155
4 568 514 460 352 244 190
5 800 770 740 680 620 590
使用了一些数据:
#Data 1
KT <- structure(list(Quantity = c(832L, 30L, 40L, 54L, 30L), X2020.09.04 = c(1L,
1L, 1L, 1L, 1L), X2020.09.05 = c(1L, 1L, 1L, 1L, 1L), X2020.09.06 = c(2L,
2L, 2L, 2L, 2L), X2020.09.07 = c(2L, 2L, 2L, 2L, 2L), X2020.09.08 = c(1L,
1L, 1L, 1L, 1L)), class = "data.frame", row.names = c(NA, -5L
))
#Data 2
FT1 <- structure(list(X2020.09.03 = c(1600L, 2000L, 435L, 568L, 800L
), X2020.09.04 = c(NA, NA, NA, NA, NA), X2020.09.05 = c(NA, NA,
NA, NA, NA), X2020.09.06 = c(NA, NA, NA, NA, NA), X2020.09.07 = c(NA,
NA, NA, NA, NA), X2020.09.08 = c(NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA,
-5L))