【发布时间】:2021-07-26 04:30:02
【问题描述】:
我一直在尝试在 R 中复制一些基本的 Excel 计算,但我找不到合适的解决方案。
我想创建一个data.frame 的新列,但是计算的值应该基于同一列的下一个值,所以它是从下往上计算的。
我可以使用同一列(以前的)的值来做到这一点,但不适用于下一个。
我的方法的第一部分工作正常(使用另一列的下一个值时),但不在同一列中。
在excel中它很简单,但不能让它工作。
另外,我不知道 for 循环是否是最佳选择,我必须使用 100 万行 data.frame 来完成它,所以它可能会很慢。
提前谢谢你。
p <- c(1,2,3,4,5,6,7,6,8,9,10)
g <- c(4,4,3,4,5,6,6,6,8,0,0)
data <- data.frame(p,g)
a <- 2
我的方法
data$f2<- 0
for (i in 1:nrow(data)){
data$f2[i] = data$g[i]*a+data$g[i+1]*a+data$g[i+2]*a+data$f2[i+1]*a+data$f2[i+2]*a
}
#Output
g f2
1 4 22
2 4 22
3 3 24
4 4 30
5 5 34
6 6 36
7 6 40
8 6 28
9 8 16
10 0 NA
11 0 NA
>
#Desired Correct Output
g f2
1 4 11232
2 4 11232
3 3 11232
4 4 4106
5 5 1498
6 6 540
7 6 192
8 6 60
9 8 16
【问题讨论】:
-
你能详细说明你的逻辑吗?
-
@markus 例如在 excel 中,C2 值取决于 C3 值和 C4 值,您添加(或在 excel 中拖动)的行数越多,就会重新计算上面的行。这个 C2(在我的方法 f2 中)应该是创建的新列。希望现在更清楚了。再次感谢
-
您还没有说如何获得所需的结果。例如,你如何得到 16?第 9 行那么你如何获得 60?那你怎么得到 192?
-
对不起,我的解释,每f2行是由同一行列g* a,行+1列ga,行+2列ga,行+1列 f2*a,行+2 列 f2*a。第 9 行是 8*2,其余值为 0。第 8 行是 6*2+8*2+16*2,第 7 行是 6*2+6*2+8*2+60*2+16* 2...