Próbuję dowiedzieć się, jak mogę wykonać logical operators
, gdy używam indeksowania w data.table package
w R
?Jak wykonywać operatory logiczne przez indeksowanie w data.table w R?
Poniżej znajduje się przykład. Tworzę datatable
o nazwie dt
. a następnie dokonać var2
jako klucz w moim datatable
:
> dt = data.table(var1 = rep(LETTERS[1:5],2), var2 = seq(1,20, 2), var3 = ceiling(rnorm(10, 3, 2)))
> dt
var1 var2 var3
1: A 1 5
2: B 3 3
3: C 5 0
4: D 7 6
5: E 9 3
6: A 11 4
7: B 13 2
8: C 15 1
9: D 17 3
10: E 19 7
> setkey(dt, var2)
Więc teraz chcę zidentyfikować wszystkie wartości w moim już zdefiniowane key (var2)
które są less than 10 (<10)
. Wykonanie następujących prób daje mi errors
.
> dt[ < 10]
Error: unexpected '<' in "dt[ <"
> dt[ .< 10]
Error in eval(expr, envir, enclos) : object '.' not found
> dt[ .(< 10)]
moje oczekiwanie będzie:
var1 var2 var3
1: A 11 4
2: B 13 2
3: C 15 1
4: D 17 3
5: E 19 7
BTW, wiem, że po prostu wykonując dostanę wynik. ALE rozważcie proszę, że chcę uzyskać pojęcie indeksowania w data.table
i zrozumieć i wiedzieć, jak to zrobić bez wywoływania key(var2)
w każdym moim poleceniu!
Każda pomoc w wyjaśnieniu jest bardzo cenna.
'dt [VAR2 <10]'?Z wyjaśnieniem, że musisz określić * coś *, aby było mniej niż 10? – Gregor
@Gregor, wiem o tym i jest to bardzo oczywiste! Ale pojęcie indeksowania polega na tym, że NIE muszę wywoływać nazwy kolumny (klucza) za każdym razem. tak, jak mogę to zrobić bez wywoływania 'var2' w moim poleceniu? – Daniel
Z '? Setkey' lub'? Key' wygląda na to, że możesz wywołać 'key()' w tabeli, aby uzyskać klucz, więc 'dt [dt [[key (dt)]] <10]' działa na to . Możesz również edytować pytanie, aby zaznaczyć, że chcesz to zrobić programowo bez wywoływania polecenia 'var2' w twoim poleceniu. – Gregor