Mam data.table nazwie enc.per.day dla spotkań dziennie. Ma 2403 wierszy, w których określona jest data wykonania usługi i liczba pacjentów widzianych w tym dniu. Chciałem zobaczyć średnią liczbę pacjentów widzianych w każdym dniu tygodnia.Dlaczego mediana potknie się w data.table (integer kontra double)?
enc.per.day[,list(patient.encounters=median(n)),by=list(weekdays(DOS))]
Linia ta daje błąd
błąd w
[.data.table
(enc.per.day, wykaz (patient.encounters = mediana (n)),: kolumny J Nie oceniać konsekwentnym typu dla każdej z grup: wynik na 4 grupy jest kolumna 1 typu „całkowita”, ale oczekując typu „podwójny”
Poniżej wszystkie dobrze
tapply(enc.per.day$n,weekdays(enc.per.day$DOS),median)
enc.per.day[,list(patient.encounters=round(median(n))),by=list(weekdays(DOS))]
enc.per.day[,list(patient.encounters=median(n)+0),by=list(weekdays(DOS))]
Co się dzieje? Zajęło mi dużo czasu, aby dowiedzieć się, dlaczego mój kod nie działa.
Nawiasem mówiąc podstawowa wektor enc.per.day $ n jest liczbą całkowitą
storage.mode(enc.per.day$n)
powraca "całkowitą". Ponadto nie ma żadnych NA w żadnym miejscu w data.table.
@Matthew Dowle - Dzięki za dodanie tych szczegółów o tym, jak * * data.table ** inicjuje i przydziela miejsce dla wektora wyników. –
Czy można uzyskać medianę tego samego typu, co wartość? Dlatego nawet jeśli miałbym takie wartości jak = 1,1,1,2,2,2,2, nie powinno to skutkować medianą = 1,5 zamiast tego powinno pokazywać medianę = 2. – lony
Jako przykład powyższej sugestii, wykonaj poniższe DT [, c (as.double (lapply (.SD, median)), .N), by = x, .SDcols = c ("x", "y "," z ")] zamiast DT [, c (lapply (.SD, mediana), .N), przez = x, .SDcols = c (" x "," y "," z ")] –