比较两个表的值与R中的容差

时间:2012-12-28 13:09:11

标签: r compare intervals

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

3 个答案:

答案 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)

使用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)

答案 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"