2012-12-28 43 views
5

Tôi muốn so sánh hai bảng. Nếu giá trị của bảng 2 đặt trong 0,3 khoan dung (+ 0,3 và -0,3) của bảng 2 gọi nó là bình thường nếu không gọi nó là bất thường.So sánh các giá trị của hai bảng liên quan đến dung sai trong R

mẫu dữ liệu:

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 

Kết quả mong đợi cho hàng đầu tiên:

nếu 0,17666667 ** - 0,3 ** < -1.6 < 0,17666667 ** + 0,3 **

kết quả NORMAL Nếu không Bất thường

Trả lời

4

Bạn cũng có thể làm điều này với 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

Sử dụng một sự kết hợp của transformifelse như trong:

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 

bộ dữ liệu bao gồm:

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

Sử dụng proxy pacakge, chúng ta có thể xây dựng này như một khoảng cách hoặc biện pháp tương tự, giải pháp Rất sạch sẽ và mở rộng cho bất kỳ khoảng cách.

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" 
Các vấn đề liên quan