首页 > 解决方案 > 如何根据从外部数据框中检索数据的公式添加列?

问题描述

下午好 ,

假设我有一个D1索引数据框:

3   9 15 12  8  3
9  12 18 11  9  6
12 22 23 19 16 20
16 19 22 20 13 23
18 10 16 11  7  4
23 15 21 18 14  9

D1=structure(list(c(9L, 12L, 22L, 19L, 10L, 15L), c(15L, 18L, 23L, 
22L, 16L, 21L), c(12L, 11L, 19L, 20L, 11L, 18L), c(8L, 9L, 16L, 
13L, 7L, 14L), c(3L, 6L, 20L, 23L, 4L, 9L)), row.names = c(3L, 
9L, 12L, 16L, 18L, 23L), class = "data.frame")

我还有一个D2概率数据库(dim = 24 * 24):

D2=structure(c(NA, 0.294303552937154, 0.10826822658929, 0.294303552937154, 
0.194493387547371, 0.0855023405283086, 0.294303552937154, 0.194493387547371, 
0.0855023405283086, 0.194493387547371, 0.141536965054211, 0.0690701037282896, 
0.10826822658929, 0.0855023405283086, 0.047284597249565, 0.0855023405283086, 
0.0690701037282896, 0.0398296546942912, 0.0398296546942912, 0.033863375698564, 
0.0217379689377885, 0.033863375698564, 0.0290200490396767, 0.0189718128018973, 
0.294303552937154, NA, 0.294303552937154, 0.194493387547371, 
0.294303552937154, 0.194493387547371, 0.194493387547371, 0.294303552937154, 
0.194493387547371, 0.141536965054211, 0.194493387547371, 0.141536965054211, 
0.0855023405283086, 0.10826822658929, 0.0855023405283086, 0.0690701037282896, 
0.0855023405283086, 0.0690701037282896, 0.033863375698564, 0.0398296546942912, 
0.033863375698564, 0.0290200490396767, 0.033863375698564, 0.0290200490396767, 
0.10826822658929, 0.294303552937154, NA, 0.0855023405283086, 
0.194493387547371, 0.294303552937154, 0.0855023405283086, 0.194493387547371, 
0.294303552937154, 0.0690701037282896, 0.141536965054211, 0.194493387547371, 
0.047284597249565, 0.0855023405283086, 0.10826822658929, 0.0398296546942912, 
0.0690701037282896, 0.0855023405283086, 0.0217379689377885, 0.033863375698564, 
0.0398296546942912, 0.0189718128018973, 0.0290200490396767, 0.033863375698564, 
0.294303552937154, 0.194493387547371, 0.0855023405283086, NA, 
0.294303552937154, 0.10826822658929, 0.194493387547371, 0.141536965054211, 
0.0690701037282896, 0.294303552937154, 0.194493387547371, 0.0855023405283086, 
0.0855023405283086, 0.0690701037282896, 0.0398296546942912, 0.10826822658929, 
0.0855023405283086, 0.047284597249565, 0.033863375698564, 0.0290200490396767, 
0.0189718128018973, 0.0398296546942912, 0.033863375698564, 0.0217379689377885, 
0.194493387547371, 0.294303552937154, 0.194493387547371, 0.294303552937154, 
NA, 0.294303552937154, 0.141536965054211, 0.194493387547371, 
0.141536965054211, 0.194493387547371, 0.294303552937154, 0.194493387547371, 
0.0690701037282896, 0.0855023405283086, 0.0690701037282896, 0.0855023405283086, 
0.10826822658929, 0.0855023405283086, 0.0290200490396767, 0.033863375698564, 
0.0290200490396767, 0.033863375698564, 0.0398296546942912, 0.033863375698564, 
0.0855023405283086, 0.194493387547371, 0.294303552937154, 0.10826822658929, 
0.294303552937154, NA, 0.0690701037282896, 0.141536965054211, 
0.194493387547371, 0.0855023405283086, 0.194493387547371, 0.294303552937154, 
0.0398296546942912, 0.0690701037282896, 0.0855023405283086, 0.047284597249565, 
0.0855023405283086, 0.10826822658929, 0.0189718128018973, 0.0290200490396767, 
0.033863375698564, 0.0217379689377885, 0.033863375698564, 0.0398296546942912, 
0.294303552937154, 0.194493387547371, 0.0855023405283086, 0.194493387547371, 
0.141536965054211, 0.0690701037282896, NA, 0.294303552937154, 
0.10826822658929, 0.294303552937154, 0.194493387547371, 0.0855023405283086, 
0.294303552937154, 0.194493387547371, 0.0855023405283086, 0.194493387547371, 
0.141536965054211, 0.0690701037282896, 0.10826822658929, 0.0855023405283086, 
0.047284597249565, 0.0855023405283086, 0.0690701037282896, 0.0398296546942912, 
0.194493387547371, 0.294303552937154, 0.194493387547371, 0.141536965054211, 
0.194493387547371, 0.141536965054211, 0.294303552937154, NA, 
0.294303552937154, 0.194493387547371, 0.294303552937154, 0.194493387547371, 
0.194493387547371, 0.294303552937154, 0.194493387547371, 0.141536965054211, 
0.194493387547371, 0.141536965054211, 0.0855023405283086, 0.10826822658929, 
0.0855023405283086, 0.0690701037282896, 0.0855023405283086, 0.0690701037282896, 
0.0855023405283086, 0.194493387547371, 0.294303552937154, 0.0690701037282896, 
0.141536965054211, 0.194493387547371, 0.10826822658929, 0.294303552937154, 
NA, 0.0855023405283086, 0.194493387547371, 0.294303552937154, 
0.0855023405283086, 0.194493387547371, 0.294303552937154, 0.0690701037282896, 
0.141536965054211, 0.194493387547371, 0.047284597249565, 0.0855023405283086, 
0.10826822658929, 0.0398296546942912, 0.0690701037282896, 0.0855023405283086, 
0.194493387547371, 0.141536965054211, 0.0690701037282896, 0.294303552937154, 
0.194493387547371, 0.0855023405283086, 0.294303552937154, 0.194493387547371, 
0.0855023405283086, NA, 0.294303552937154, 0.10826822658929, 
0.194493387547371, 0.141536965054211, 0.0690701037282896, 0.294303552937154, 
0.194493387547371, 0.0855023405283086, 0.0855023405283086, 0.0690701037282896, 
0.0398296546942912, 0.10826822658929, 0.0855023405283086, 0.047284597249565, 
0.141536965054211, 0.194493387547371, 0.141536965054211, 0.194493387547371, 
0.294303552937154, 0.194493387547371, 0.194493387547371, 0.294303552937154, 
0.194493387547371, 0.294303552937154, NA, 0.294303552937154, 
0.141536965054211, 0.194493387547371, 0.141536965054211, 0.194493387547371, 
0.294303552937154, 0.194493387547371, 0.0690701037282896, 0.0855023405283086, 
0.0690701037282896, 0.0855023405283086, 0.10826822658929, 0.0855023405283086, 
0.0690701037282896, 0.141536965054211, 0.194493387547371, 0.0855023405283086, 
0.194493387547371, 0.294303552937154, 0.0855023405283086, 0.194493387547371, 
0.294303552937154, 0.10826822658929, 0.294303552937154, NA, 0.0690701037282896, 
0.141536965054211, 0.194493387547371, 0.0855023405283086, 0.194493387547371, 
0.294303552937154, 0.0398296546942912, 0.0690701037282896, 0.0855023405283086, 
0.047284597249565, 0.0855023405283086, 0.10826822658929, 0.10826822658929, 
0.0855023405283086, 0.047284597249565, 0.0855023405283086, 0.0690701037282896, 
0.0398296546942912, 0.294303552937154, 0.194493387547371, 0.0855023405283086, 
0.194493387547371, 0.141536965054211, 0.0690701037282896, NA, 
0.294303552937154, 0.10826822658929, 0.294303552937154, 0.194493387547371, 
0.0855023405283086, 0.294303552937154, 0.194493387547371, 0.0855023405283086, 
0.194493387547371, 0.141536965054211, 0.0690701037282896, 0.0855023405283086, 
0.10826822658929, 0.0855023405283086, 0.0690701037282896, 0.0855023405283086, 
0.0690701037282896, 0.194493387547371, 0.294303552937154, 0.194493387547371, 
0.141536965054211, 0.194493387547371, 0.141536965054211, 0.294303552937154, 
NA, 0.294303552937154, 0.194493387547371, 0.294303552937154, 
0.194493387547371, 0.194493387547371, 0.294303552937154, 0.194493387547371, 
0.141536965054211, 0.194493387547371, 0.141536965054211, 0.047284597249565, 
0.0855023405283086, 0.10826822658929, 0.0398296546942912, 0.0690701037282896, 
0.0855023405283086, 0.0855023405283086, 0.194493387547371, 0.294303552937154, 
0.0690701037282896, 0.141536965054211, 0.194493387547371, 0.10826822658929, 
0.294303552937154, NA, 0.0855023405283086, 0.194493387547371, 
0.294303552937154, 0.0855023405283086, 0.194493387547371, 0.294303552937154, 
0.0690701037282896, 0.141536965054211, 0.194493387547371, 0.0855023405283086, 
0.0690701037282896, 0.0398296546942912, 0.10826822658929, 0.0855023405283086, 
0.047284597249565, 0.194493387547371, 0.141536965054211, 0.0690701037282896, 
0.294303552937154, 0.194493387547371, 0.0855023405283086, 0.294303552937154, 
0.194493387547371, 0.0855023405283086, NA, 0.294303552937154, 
0.10826822658929, 0.194493387547371, 0.141536965054211, 0.0690701037282896, 
0.294303552937154, 0.194493387547371, 0.0855023405283086, 0.0690701037282896, 
0.0855023405283086, 0.0690701037282896, 0.0855023405283086, 0.10826822658929, 
0.0855023405283086, 0.141536965054211, 0.194493387547371, 0.141536965054211, 
0.194493387547371, 0.294303552937154, 0.194493387547371, 0.194493387547371, 
0.294303552937154, 0.194493387547371, 0.294303552937154, NA, 
0.294303552937154, 0.141536965054211, 0.194493387547371, 0.141536965054211, 
0.194493387547371, 0.294303552937154, 0.194493387547371, 0.0398296546942912, 
0.0690701037282896, 0.0855023405283086, 0.047284597249565, 0.0855023405283086, 
0.10826822658929, 0.0690701037282896, 0.141536965054211, 0.194493387547371, 
0.0855023405283086, 0.194493387547371, 0.294303552937154, 0.0855023405283086, 
0.194493387547371, 0.294303552937154, 0.10826822658929, 0.294303552937154, 
NA, 0.0690701037282896, 0.141536965054211, 0.194493387547371, 
0.0855023405283086, 0.194493387547371, 0.294303552937154, 0.0398296546942912, 
0.033863375698564, 0.0217379689377885, 0.033863375698564, 0.0290200490396767, 
0.0189718128018973, 0.10826822658929, 0.0855023405283086, 0.047284597249565, 
0.0855023405283086, 0.0690701037282896, 0.0398296546942912, 0.294303552937154, 
0.194493387547371, 0.0855023405283086, 0.194493387547371, 0.141536965054211, 
0.0690701037282896, NA, 0.294303552937154, 0.10826822658929, 
0.294303552937154, 0.194493387547371, 0.0855023405283086, 0.033863375698564, 
0.0398296546942912, 0.033863375698564, 0.0290200490396767, 0.033863375698564, 
0.0290200490396767, 0.0855023405283086, 0.10826822658929, 0.0855023405283086, 
0.0690701037282896, 0.0855023405283086, 0.0690701037282896, 0.194493387547371, 
0.294303552937154, 0.194493387547371, 0.141536965054211, 0.194493387547371, 
0.141536965054211, 0.294303552937154, NA, 0.294303552937154, 
0.194493387547371, 0.294303552937154, 0.194493387547371, 0.0217379689377885, 
0.033863375698564, 0.0398296546942912, 0.0189718128018973, 0.0290200490396767, 
0.033863375698564, 0.047284597249565, 0.0855023405283086, 0.10826822658929, 
0.0398296546942912, 0.0690701037282896, 0.0855023405283086, 0.0855023405283086, 
0.194493387547371, 0.294303552937154, 0.0690701037282896, 0.141536965054211, 
0.194493387547371, 0.10826822658929, 0.294303552937154, NA, 0.0855023405283086, 
0.194493387547371, 0.294303552937154, 0.033863375698564, 0.0290200490396767, 
0.0189718128018973, 0.0398296546942912, 0.033863375698564, 0.0217379689377885, 
0.0855023405283086, 0.0690701037282896, 0.0398296546942912, 0.10826822658929, 
0.0855023405283086, 0.047284597249565, 0.194493387547371, 0.141536965054211, 
0.0690701037282896, 0.294303552937154, 0.194493387547371, 0.0855023405283086, 
0.294303552937154, 0.194493387547371, 0.0855023405283086, NA, 
0.294303552937154, 0.10826822658929, 0.0290200490396767, 0.033863375698564, 
0.0290200490396767, 0.033863375698564, 0.0398296546942912, 0.033863375698564, 
0.0690701037282896, 0.0855023405283086, 0.0690701037282896, 0.0855023405283086, 
0.10826822658929, 0.0855023405283086, 0.141536965054211, 0.194493387547371, 
0.141536965054211, 0.194493387547371, 0.294303552937154, 0.194493387547371, 
0.194493387547371, 0.294303552937154, 0.194493387547371, 0.294303552937154, 
NA, 0.294303552937154, 0.0189718128018973, 0.0290200490396767, 
0.033863375698564, 0.0217379689377885, 0.033863375698564, 0.0398296546942912, 
0.0398296546942912, 0.0690701037282896, 0.0855023405283086, 0.047284597249565, 
0.0855023405283086, 0.10826822658929, 0.0690701037282896, 0.141536965054211, 
0.194493387547371, 0.0855023405283086, 0.194493387547371, 0.294303552937154, 
0.0855023405283086, 0.194493387547371, 0.294303552937154, 0.10826822658929, 
0.294303552937154, NA), .Dim = c(24L, 24L), .Dimnames = list(
    c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", 
    "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", 
    "22", "23", "24"), c("1", "2", "3", "4", "5", "6", "7", "8", 
    "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", 
    "19", "20", "21", "22", "23", "24")))

问题 :

D1,我正在寻找一种方法来添加一个名为的列results,例如:

D1[1,"results"]=1-(1-D2[15,9])*(1-D2[12,9])*(1-D2[8,9])*(1-D2[3,9]) 
D1[2,"results"]=1-(1-D2[18,12])*(1-D2[11,12])*(1-D2[9,12])*(1-D2[6,12])
...

我还想检索元素矩阵:

D2[15,9]  D2[12,9]  D2[8,9]  D2[3,9]
D2[18,12] D2[11,12] D2[9,12] D2[6,12]
D2[22,23] D2[19,22] D2[16,22] D2[20,22]
...

无论如何,是否可以在dplyr不使用循环的情况下通过基本的 R / 获得此结果。

我希望我的问题是明确和可行的。非常感谢您的帮助!

标签: rdplyr

解决方案


我们可以遍历'D1'的行,根据行中的值提取'D2'的列值并进行计算

D1$results <- apply(D1, 1, function(x) 
      1 - (1 - D2[x[2], x[1]]) * (1-D2[x[3],
         x[1]])*(1-D2[x[4],x[1]])*(1-D2[x[5],x[1]]))
D1$results
#[1] 0.7519886 0.7519886 0.7169111 0.7169111 0.7519886 0.7519886 

如果尺寸发生变化,则创建行/列索引以提取值并使用prod

apply(D1, 1, function(x) 1 - prod(1 - D2[cbind(x[-1], x[1])]))
#0.7519886 0.7519886 0.7169111 0.7169111 0.7519886 0.7519886 

此外,要仅提取值,请删除prod

apply(D1, 1, function(x) D2[cbind(x[-1], x[1])])

推荐阅读