Chciałbym użyć data.table
ale chciałby pominąć obliczenia j
części, jeżeli by
odpowiada brakuje (NA
):Pomiń NA w data.table przez
Oto przykład data.table
library(data.table)
DT <- data.table(y=10, g=c(1,1,1,2,2,2,2,2,NA,NA))
wygląda to
> DT
y g
1: 10 1
2: 10 1
3: 10 1
4: 10 2
5: 10 2
6: 10 2
7: 10 2
8: 10 2
9: 10 NA
10: 10 NA
teraz chciałbym zrobić by=
na g
i dwa wiersze 9 i 10 zostaną zgrupowane razem, ponieważ mają tę samą wartość NA
.
> DT[,.N, by=g]
g N
1: 1 3
2: 2 5
3: NA 2
Chciałbym zachować linię NA
na wyjściu, ale chciałby, aby pominąć część Obliczyć wynik, tzn., Uzyskać wyjście, gdzie N
jest pusta, kiedy g
jest NA
> DT[,.N, by=g]
g N
1: 1 3
2: 2 5
3: NA NA
Myślałem, że mogę uzyskać dostęp do wartości g
przez .GRP
, ale to tylko daje indeks grupy, a nie wartość. Czy możliwe jest uzależnienie obliczeń od brakującego statusu zmiennej by
?
Wartość _ Twojej zmiennej grupującej _can_ jest dostępna w 'j' - ma długość jeden, jeśli jest używana w' j' (patrz [FAQ 2.10 Wewnątrz każdej grupy, dlaczego zmienne grupy mają długość-1?] (Https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-faq.html#inside-each-group-why-are-the-group-variables-length-1) Więc coś jak 'DT [, if (! is.na (g)). (n = .N) else NA_integer_, by = g] 'zadziałałoby – Henrik
Co jest nie tak z filtrowaniem przez'! is.na (g) 'w argumencie' i'? 'DT [! Is.na (g), N, przez = g]' –
@ScottRitchie Myślę, że to usunęłoby linię 'NA' z wyniku. Nadal chcę tego dla następnego łączenia. – ekstroem