我需要根据以下公式进行一些计算:
B1 = A1 + (1-A1) * B1
示例:
B1 = 0.2 + (1 - 0.2) * 0.4
= 0.52
C1 = 0.4 + (1 - 0.4) * 0.8
= 0.904
D1 = 0.8 + (1 - 0.8) * 0.5
= 0.952
相同的逻辑适用于其他行和其他列,共有11个。
dataframe:
df
A B C D
0.2 0.4 0.8 0.5
0.4 0.5 0.6 0.2
0.8 0.1 0.5 0.4
0.3 0.4 0.1 0.8
预期产出:
A B C D
0.2 0.52 0.904 0.952
0.4 0.7 0.88 0.904
0.8 0.82 0.91 0.946
0.3 0.58 0.622 0.9244
我用以下代码尝试了1:
Df <- df[-ncol(df)] + ( 1 – df[-ncol(df)]) * df[-1]
我能够根据输出获得列B,但不能用于列的其余部分。 请帮忙,谢谢。 BM。
答案 0 :(得分:5)
您可以按如下方式递归执行此操作:
do.call(cbind, Reduce(f = function(A1, B1) A1+(1-A1)*B1,
x = df,
accumulate = TRUE))
说明:
由于df是一个data.frame,它是一个向量列表,Reduce
将采用每个向量并应用你的函数。然后do.call(cbind,...)
将结果合并到data.frame。