我想比较两张桌子。如果 table 2 的值放在表2的0.3容差(+0.3和-0.3)中,则称其为正常,否则称其为异常。
示例数据:
Table 1.
0.17666667
-0.2413333
-0.179666
0.182437
0.012229
0.127333
-0.1180
0.8873
1.24100
1.5213
Table 2.
-1.6
-0.5
-0.4
-0.4
-0.2
2.5
0.6
2.2
2.3
1.3
第一行的预期结果:
如果0.17666667 ** - 0.3 ** <-1.6 <0.17666667 ** + 0.3 **
结果 NORMAL 否则异常
答案 0 :(得分:5)
您也可以使用all.equal
执行此操作。
table.1 <- scan(text="
0.17666667
-0.2413333
-0.179666
0.182437
0.012229
0.127333
-0.1180
0.8873
1.24100
1.5213")
table.2 <- scan(text="
-1.6
-0.5
-0.4
-0.4
-0.2
2.5
0.6
2.2
2.3
1.3")
are.close <- function(x, y, tol) isTRUE(all.equal(x, y, tol))
close <- mapply(are.close, x=table.1, y=table.2, tol=0.3)
result <- ifelse(close, 'N', 'A')
# [1] "A" "N" "N" "A" "N" "A" "A" "A" "A" "N"
答案 1 :(得分:1)
使用transform
和ifelse
的组合,如下所示:
DF <- data.frame(Table_1=unname(Table_1), Table_2=unname(Table_2))
DF <- transform(DF,
Result = ifelse(Table_1 - 0.3 < Table_2 & Table_2 < Table_1 + 0.3, 'Normal', 'Abnormal'))
Table_1 Table_2 Result
1 0.1766667 -1.6 Abnormal
2 -0.2413333 -0.5 Normal
3 -0.1796660 -0.4 Normal
4 0.1824370 -0.4 Abnormal
5 0.0122290 -0.2 Normal
6 0.1273330 2.5 Abnormal
7 -0.1180000 0.6 Abnormal
8 0.8873000 2.2 Abnormal
9 1.2410000 2.3 Abnormal
10 1.5213000 1.3 Normal
数据集是:
Table_1 <- read.table(text="0.17666667
-0.2413333
-0.179666
0.182437
0.012229
0.127333
-0.1180
0.8873
1.24100
1.5213", header=F)
Table_2 <- read.table(text="-1.6
-0.5
-0.4
-0.4
-0.2
2.5
0.6
2.2
2.3
1.3", header=F)
答案 2 :(得分:0)
使用proxy
包,我们可以将其表示为距离或相似性度量,
对任何距离都非常干净和可扩展的解决方案。
library(proxy)
result <- rep('abnormal',length(Table 1.)) ## initialize mu result vector
result[dist(df[,1], df[,2],
method = function(x,y) abs(x -y), ## I define my own distance
pairwise = TRUE) < 0.3] <- 'normal' ## by pair distance
result
[1] "abnormal" "normal" "normal" "abnormal" "normal"
"abnormal" "abnormal" "abnormal"
"abnormal" "normal"