【发布时间】:2021-07-06 18:38:07
【问题描述】:
我是 R 新手,需要建议如何根据另一个数据帧数据对数据帧进行子集化,以便它们匹配,查看行数和列数。
我的总体目标是在不同版本的测试套件之间执行 Mantel 测试。
为此,我必须比较版本 1 和版本 2 中存在的测试用例子集,因为在版本 2 中添加了更多测试用例,但对于 Mantel 测试,您需要(最好)两个对称矩阵。
我的矩阵看起来如何(小例子,它们最多可以有 400 万个字段):
File | testA | testB | testC | ...
testA| 0.0 | 0.62 | 0.45 | ...
testB| 0.62 | 0.0 | 0.12 | ...
testC| 0.45 | 0.12 | 0 | ...
到目前为止我在做什么:
matrixA<- read.csv("data\\distanceMatricesJacksonDatabindV112\\dm_jaccard.csv", header = FALSE)
matrixB<- read.csv("data\\distanceMatricesJacksonDatabindV112\\dm_NCD.csv", header = FALSE)
testMantel = mantel(matrixA, matrixB, method = "spearman", permutations = 99, na.rm = TRUE)
此代码将我的距离矩阵(csv 格式)作为数据帧读取,然后对它们执行 Mantel 测试。它目前不包括标题作为标题,因为那时比较不起作用。但是,当我选择“TRUE”时,它们可用并用作标题,如您在此屏幕截图中所见:
这仅适用,只要数据帧之间的行数和列数相同。因此,我正在寻找一种方法来确保只有 MatrixA 中存在的条目(由第一列和第一行标识)将从 MatrixB 提取到 MatrixC,然后与 MatrixA 进行比较,以查找代际变化。
所以这就是我需要它的样子:
Matrix A Matrix B Result: Matrix C
File | testA | testB | File | testA | testB | testC | File | testA | testB |
testA| 0.0 | 0.643 | testA| 0.0 | 0.3 | 0.64 | testA| 0.0 | 0.3 |
testB| 0.643 | 0.0 | testB| 0.3 | 0.0 | 0.2 | testB| 0.3 | 0.0 |
testC| 0.64 | 0.2 | 0.0 |
从示例中可以看出,testB 必须在矩阵 A 和矩阵 B 之间发生变化,因为值从 0.643 变为 0.3。 TestC 不应出现在矩阵 C 中,因为矩阵 A 不知道它。同样重要的是:新测试不会自动添加到底部。它们可以位于矩阵中的任何位置,介于旧案例之间。 我已经尝试过这个(以及更多),但我收到一条错误消息,上面写着“非方阵”
required_df <- jaccardV2[jaccardV2$V1 %in% jaccard$V1,]
如果有任何帮助,我将不胜感激
更新:我已经找到了解决方案,并在上一篇文章中添加了它
【问题讨论】:
标签: r dataframe matrix data-science subset