Moje pytanie dotyczy R data.table z wieloma kluczami. wziąć ten przykład:Połączenie łączenia z niepowiązaniami w data.table?
library(data.table)
example(data.table)
key(DT)
[1] "x" "y"
i załóżmy chcę odmianę "x nie jest równe B i Y nie równe 3", jak tu:
DT[!J("b",3)]
x y v v2 m
1: a 1 42 NA 42
2: a 3 42 NA 42
3: a 6 42 NA 42
4: b 1 4 84 5
5: b 6 6 84 5
6: c 1 7 NA 8
7: c 3 8 NA 8
8: c 6 9 NA 8
Wahania chcę jest „x EQUAL b i y NOT równe 3 ", jak tutaj:
DT[J("b",!3)]
Error in `[.data.table`(DT, J("b", !3)) :
typeof x.y (double) != typeof i.V2 (logical)
Czy istnieje jakaś możliwość powiedzenia J(), aby zanegować niektóre klucze? Dzięki!
znajdę składnię follow nieco bardziej przejrzysty: 'DT [x == 'b' & y! = 3] ' –
Witam @GaryWeissman, twoja składnia implikuje skanowanie wektorowe. Celem operacji data.table i join jest unikanie tych, używając kluczy. Ale myślę, że masz rację, że dla użytkowników non data.table, które jest łatwiejsze do zrozumienia. –
Nie sądzę, że funkcja 'J' obsługuje non-concordant operatorów logicznych między argumentami. Wierzę, że powyższa składnia jest nadal szybsza w DT niż w DF. –