我需要根据以下公式进行一些计算:
B1 = A1 + (1-A1) * B1
Run Code Online (Sandbox Code Playgroud)
例:
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
Run Code Online (Sandbox Code Playgroud)
适用于其他行和其他列的逻辑相同,共有11个.
数据帧:
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
Run Code Online (Sandbox Code Playgroud)
预期产量:
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
Run Code Online (Sandbox Code Playgroud)
我用以下代码尝试了1:
Df <- df[-ncol(df)] + ( 1 – df[-ncol(df)]) * df[-1]
Run Code Online (Sandbox Code Playgroud)
我能够根据输出得到列B,但不能用于列的其余部分.请帮忙,谢谢.BM.
您可以按如下方式递归执行此操作:
do.call(cbind, Reduce(f = function(A1, B1) A1+(1-A1)*B1,
x = df,
accumulate = TRUE))
Run Code Online (Sandbox Code Playgroud)
说明:由于df是一个data.frame,它是一个向量列表,Reduce将采用每个向量并应用您的函数.然后do.call(cbind,...)将结果合并到data.frame中.