2017-01-16 19 views
5

Tôi có một bộ dữ liệu trong một định dạng data.table trông như vậy:Kiểm tra xem liệu giá trị có nằm trong phạm vi không?

ID  time.s  time.e 
1  1   2 
2  1   4 
3  2   3 
4  2   4 

Tôi muốn kiểm tra xem nếu giá trị 1 là trong vòng time.stime.e để kết quả cuối cùng sẽ như thế nào

[1] TRUE TRUE FALSE FALSE 

Tôi sẽ làm thế nào? Tôi đã cố gắng sử dụng

a[1 %in% seq(time.s, time.e)] 

Nhưng tất cả những gì tôi nhận được là tất cả giá trị TRUE. Bất kỳ đề xuất?

+0

@scoa. Điều này thực sự là một data.table – akash87

+0

@ akash87 xin lỗi sau đó; nhưng bạn nên đề cập đến nó trong câu hỏi :) – scoa

Trả lời

4

Giả sử rằng các giá trị của ID là duy nhất:

DT[, list(OK = 1 %in% seq(time.s, time.e)), by = ID] 

cho;

ID OK 
1: 1 TRUE 
2: 2 TRUE 
3: 3 FALSE 
4: 4 FALSE 
4

Ngoài ra, công trình này:

with(dat, time.s <= 1 & time.e >= 1) 
1

Dưới đây là một số khác.

library(TeachingDemos) 
a[time.s %<=% 1 %<=% time.e] 

Có thể quá tải để tải thư viện cho điều đó, nhưng cú pháp khá trực quan.

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