我有两个数据集Mtest和Ztest。我正在尝试将各个数据集中的每个值都比较为零,并使用比较的结果来创建一个具有结果的新数据集。比较应该得出三个结果之一。
Result 1: Mtest > 0 & Ztest > 0 <- "OW"
Result 2: Mtest < 0 & Ztest < 0 <- "UW"
Result 3: Mtest < 0 & Ztest > 0 | Mtest > 0 & Ztest < 0 <- "MW"
数据集1:Mtest:
A B C D E F G H
1 -0.0306 0.0148 -0.0194 -0.0074 -0.0710 0.0020 -0.0060 -0.0010
2 -0.0082 0.0146 -0.0058 0.0030 -0.0350 0.0073 0.0108 0.0003
3 0.0038 0.0267 -0.0017 0.0186 -0.0051 0.0115 0.0361 0.0027
4 0.0150 0.0304 0.0011 0.0267 0.0261 0.0128 0.0378 0.0078
5 0.0048 0.0421 -0.0140 0.0327 0.0462 0.0141 0.0830 0.0111
6 0.0225 0.0448 -0.0060 0.0369 0.0602 0.0158 0.0711 0.0121
数据集2:Ztest
A B C D E F G H
1 3.6746 0.3508 3.6308 2.6540 1.6122 3.3419 -0.0075 0.2960
2 1.0267 -0.6883 0.5399 -0.2005 -0.5095 0.1366 -0.6247 -0.0911
3 0.3776 2.2182 0.2944 1.8630 1.6847 1.6018 1.6330 0.3921
4 0.7568 -0.5380 0.3686 0.1086 0.0234 0.1360 -0.7992 0.0055
5 -1.0248 2.6451 -1.5115 0.9517 0.7697 1.1084 2.0410 0.5189
6 1.0474 0.0568 0.7330 0.2214 -0.0264 -0.1067 -0.3753 0.0055
所需的输出:
A B C D E F G H
1 MW OW MW MW MW OW UW MW
2 MW MW MW MW UW OW MW MW
3 OW OW MW OW MW OW OW OW
4 OW MW OW OW OW OW OW OW
5 MW OW UW OW OW OW OW OW
6 OW OW MW OW MW MW MW OW
我的逻辑不是为E列第3行生成MW。以下是我的循环正在生成的输出示例:
A B C D E F G H
1 OW OW OW OW OW OW UW OW
2 OW MW OW MW UW OW MW MW
3 OW OW OW OW OW OW OW OW
4 OW MW OW OW OW OW MW OW
5 MW OW UW OW OW OW OW OW
6 OW OW OW OW MW MW MW OW
当我运行以下循环时,它并不能始终产生“ MW”结果,我认为这与“ OR”有关,但由于逻辑看起来正确,因此无法弄清楚是什么原因导致了此问题。我。一个例子是(第E列第3行)应为“ MW”,但要加上“ OW”
testMatrix <- matrix(0, ncol = 8, nrow = 6)
for(i in 1:nrow(Ztest)) {
for(j in 1:ncol(Ztest)) {
if(c(Ztest[i,j], Mtest[i,j]) > 0){
testMatrix.tf[i,j] <- "OW"
} else {
if(((Ztest[i,j] > 0 ) & (Mtest[i,j] < 0)) | ((Ztest[i,j] < 0) & (Mtest[i,j] > 0))){
testMatrix[i,j] <- "MW"
} else {
if(c(Ztest[i,j],Mtest[i,j]) < 0){
testMatrix.tf[i,j] <- "UW"
}
}
}
}
}
一如既往,感谢您可以通过逻辑比较为我发现问题提供帮助。
答案 0 :(得分:0)
可以矢量化方式完成
out <- (Mtest > 0 & Ztest > 0) + 2 * (Mtest < 0 & Ztest < 0) +
4 * ((Mtest < 0 & Ztest > 0) | (Mtest > 0 & Ztest < 0))
out[] <- c("OW", "UW", "MW")[as.numeric(factor(out))]
答案 1 :(得分:0)
再次感谢您的帮助。在比较all()
语句中的向量时,我被引导使用if
。再次感谢!