2012-12-28 12 views
5

Chciałem porównać dwie tabele. Jeśli wartość tabela 2 umieszczone w 0,3 tolerancji (+0,3 i -0,3) tabeli 2 nazwać to normalne inaczej nazwać to nienormalne.Porównanie wartości dwóch tabel w odniesieniu do tolerancji w R

próbki danych:

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 

Oczekiwane wyniki dla pierwszego rzędu:

jeśli 0,17666667 ** - 0,3 ** < -1,6 < 0,17666667 ** + 0,3 **

wynik NORMALNY W przeciwnym razie Abnormal

Odpowiedz

4

Można również zrobić to z 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

Użyj kombinacji transform i ifelse jak w:

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 

zbiory danych są:

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

Korzystanie proxy pacakge, możemy sformułować to jako odległość lub podobieństwa środka, bardzo czyste i rozszerzalny rozwiązania dowolnej odległości.

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" 
Powiązane problemy