2017-01-16 21 views
5

Mam zestawu danych w formacie data.table który wygląda w następujący sposób:Sprawdź, czy wartość mieści się w zakresie?

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

Chcę sprawdzić, jeśli wartość 1 jest w time.s i time.e tak, że końcowy wynik będzie wyglądać

[1] TRUE TRUE FALSE FALSE 

Jak bym to zrobił? Próbowałem użyć

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

Ale otrzymuję wszystkie wartości PRAWDA. Wszelkie zalecenia?

+0

@scoa. To jest faktycznie data.table – akash87

+0

@ akash87 sorry; ale powinieneś o tym wspomnieć w pytaniu :) – scoa

Odpowiedz

4

Zakładając, że wartości ID są wyjątkowe:

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

daje;

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

Również to działa:

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

Oto kolejny jeden.

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

To chyba przesada, aby załadować do tego bibliotekę, ale składnia jest dość intuicyjna.

Powiązane problemy