2012-12-28 23 views
5

'daki bir toleransla karşılaştırmak için iki tabloyu karşılaştırmak istedim. Tablo 2'nin 0.3 toleransına (+0.3 ve -0.3) yerleştirilmiş tablo 2 değeri normal ise, normal olarak anormal olarak adlandırın.İki tablo değerlerini R

Örnek veri:

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 
ilk satır

Beklenen Sonuçlar:

halinde 0,17666667 ** - 0.3 ** < -1.6 < 0,17666667 ** + 0.3 **

sonuç NORMAL Aksi taktirde Anormal

cevap

4

Ayrıca all.equal ile bu yapabilirdi.

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

gibi transform ve ifelse bir arada kullanın:

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 

veri kümeleri şunlardır:

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) 
0

proxy pacakge kullanarak, bir mesafe veya benzerlik ölçüsü, herhangi bir mesafe ile çok temiz ve genişletilebilir bir çözüm olarak bu formüle edebilir.

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"