根据公式计算

时间:2018-04-09 10:06:31

标签: r loops dataframe

我需要根据以下公式进行一些计算:

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。

1 个答案:

答案 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。