Ho un data.table chiamato enc.per.day per gli incontri al giorno. Ha 2403 file in cui è specificata una data di servizio e il numero di pazienti visti in quel giorno. Volevo vedere il numero medio di pazienti visti su qualsiasi tipo di giorno della settimana.Perché la mediana fa scattare dati.table (intero contro doppio)?
enc.per.day[,list(patient.encounters=median(n)),by=list(weekdays(DOS))]
Quella linea dà un errore
Error in
[.data.table
(enc.per.day,, la lista (patient.encounters = mediana (n)),: colonne di j non valutano ai tipi coerenti per ciascun gruppo: risultato gruppo 4 presenta colonna 1 tipo 'integer' ma tipo aspetta 'double'
Il seguente tutto lavoro ben
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))]
Cosa sta succedendo? Mi ci è voluto molto tempo per capire perché il mio codice non funzionasse.
A proposito sottostante vettore enc.per.day $ n è un numero intero
storage.mode(enc.per.day$n)
restituisce "integer". Inoltre, non ci sono NA da nessuna parte nel data.table.
@ Matteo Dowle - Grazie per l'aggiunta di quei dettagli su come * * data.table ** inizializza e alloca lo spazio per il vettore dei risultati. –
È possibile avere una mediana dello stesso tipo del valore? Perciò anche se avessi valori come = 1,1,1,2,2,2,2 non dovrebbe risultare in mediana = 1,5 invece dovrebbe mostrare mediana = 2. – lony
Come esempio del suggerimento precedente, esegui questo DT [, c (as.double (lapply (.SD, median)), .N), per = x, .SDcols = c ("x", "y "," z ")] anziché DT [, c (lapply (.SD, mediana), .N), da = x, .SDcols = c (" x "," y "," z ")] –