我用一个小日期框架来说明我的问题,例如:
X1 X2 X3
1 0 1 2
2 0 1 3
3 0 1 4
4 0 2 3
5 0 2 4
6 0 3 4
7 1 2 3
8 1 2 4
9 1 3 4
10 2 3 4
(真正的行会有很多行...)
我必须使用 12个附加值扩展此数据框的每一行,考虑到已存在的3个值是由递归等式定义的系列的3个起始项:
U(n) = U(n-1) - Min(U(n-2), U(n-3))
例如考虑第一行0,1,2。下一个术语(第4个)必须是:
2 - Min(1, 0) = 2 - 0 = 2
等。最后,我的第一行将是:
0 1 2 2 1 -1 -2 -1 1 3 4 3 0 -3 -3
我必须在初始数据框的每一行重复此操作。当然,我知道我可以使用复杂的循环“for {***}”来做到这一点,但这很耗时。
有没有办法逐列构建最终数据框? (我的意思是不列出行,而是基于递推方程一次构造整列)
答案 0 :(得分:0)
你不必写一个复杂的循环'并逐行工作。您只需编写一个简单的循环并逐列计算,例如:
# recreate the sample dataframe
data <- data.frame(x1 = c(rep(0, 6), 1,1,1,2),
X2 = c(1,1,1,2,2,4,2,2,3,3),
X3 = c(2,3,4,3,4,4,3,4,4,4))
# create placeholder dataframe full of zeros
temp <- data.frame(matrix(data = 0, nrow = 10, ncol = 15))
# write the original dataframe into the placeholder dataframe
temp[, 1:3] <- data
# for columns 4 to 15 in the placeholder dataframe
for(i in 4:15)
{
# calculate each column based on the given formula
temp[, i] <- temp[, i-1] - pmin(temp[,i-2], temp[, i-3])
}