5

我想比较两张表。如果将表 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 否则异常

4

3 回答 3

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"
于 2012-12-28T14:15:43.627 回答
1

使用 和 的组合,transformifelse

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)
于 2012-12-28T13:21:16.037 回答
0

使用proxypacakge,我们可以将其表述为距离或相似性度量,非常干净且可扩展的解决方案,适用于任何距离。

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" 
于 2012-12-28T14:34:44.657 回答