2013-03-12 40 views
15
df <- structure(list(x = 1:10, time = c(0.5, 0.5, 1, 2, 3, 0.5, 0.5, 
1, 2, 3)), .Names = c("x", "time"), row.names = c(NA, -10L), class = "data.frame") 


df[df$time %in% c(0.5, 3), ] 
##  x time 
## 1 1 0.5 
## 2 2 0.5 
## 5 5 3.0 
## 6 6 0.5 
## 7 7 0.5 
## 10 10 3.0 

df[df$time == c(0.5, 3), ] 
##  x time 
## 1 1 0.5 
## 7 7 0.5 
## 10 10 3.0 

sự khác biệt giữa %in%== ở đây là gì?Sự khác nhau giữa `% trong%` và `== '

+1

Xem '? '=='' và '? '% Trong%'' trong R –

+1

bạn có thể quan tâm đến [số video # 033] (http://www.twotorials.com/) –

Trả lời

23

Vấn đề là tái chế vectơ.

Dòng đầu tiên của bạn thực hiện chính xác những gì bạn mong đợi. Nó kiểm tra những yếu tố của df$time là trong c(0.5, 3) và trả về các giá trị.

Dòng thứ hai của bạn phức tạp hơn. Nó thực sự tương đương với

df[df$time == rep(c(0.5,3), length.out=nrow(df)),] 

Để thấy điều này, chúng ta hãy xem những gì sẽ xảy ra nếu sử dụng một vector rep(0.5, 10):

rep(0.5, 10) == c(0.5, 3) 
[1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE 

Xem cách nó sẽ trả về tất cả các giá trị lẻ. Về cơ bản, nó khớp với 0,5 với vectơ c(0.5, 3, 0.5, 3, 0.5...)

Bạn có thể thao tác một véc tơ để không tạo ra kết quả phù hợp theo cách này. Lấy véc tơ: rep(c(3, 0.5), 5):

rep(c(3, 0.5), 5) == c(0.5, 3) 
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

Tất cả đều là FALSE. Bạn phù hợp với mọi 0.5 với 3 và ngược lại.

+0

tải xuống luôn sử dụng '% in%' trừ khi tôi so sánh một giá trị duy nhất HOẶC thực sự có ý định sử dụng tái chế, cảm ơn rất rõ ràng + – user1320502

+0

@ user1320502 Thực ra, có một số lợi thế khi sử dụng% trong% ngay cả khi bạn có một giá trị. Hãy thử 'x <- c (1: 5, đại diện (NA, 3)); x [x == 3] 'và so sánh nó với' x [x% trong% 3] '. –

8

Trong

df$time == c(0.5,3) 

các c(0.5,3) đầu tiên được phát sóng đến hình dạng của df$time, ví dụ: c(0.5,3,0.5,3,0.5,3,0.5,3,0.5,3). Sau đó, hai vectơ được so sánh từng phần tử.

Mặt khác,

df$time %in% c(0.5,3) 

kiểm tra xem mỗi yếu tố của df$time thuộc về tập {0.5, 3}.

Các vấn đề liên quan