r - 如何根据从外部数据框中检索数据的公式添加列?
问题描述
下午好 ,
假设我有一个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 / 获得此结果。
我希望我的问题是明确和可行的。非常感谢您的帮助!
解决方案
我们可以遍历'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])])
推荐阅读
- pandas - 分类数据的累积值计数,分组依据
- html - CSS 网格还是列?
- python - docker-compose/django TypeError:预期的 str、字节或 os.PathLike 对象,而不是 NoneType
- graphics - 如何在 HTML5 画布上使用二次贝塞尔曲线绘制小写 b
- php - Laravel 在 spatie-permission 的 foreach 循环中给出错误
- scala - 在 Spark DataFrame 中添加一个新列,其中包含一列的所有值的总和 - Scala/Spark
- reactjs - 为什么我在创建 React 应用程序时出错?
- matlab - 在一个简单的图上定位并绘制最小值
- sql - 修改查询以按客户端标识符分组
- wordpress - 在 wordpress 文件上传中缺少一个临时文件夹