Tengo una tabla de datos llamada enc.per.day para encuentros por día. Tiene 2403 filas en las que se especifica una fecha de servicio y la cantidad de pacientes atendidos ese día. Quería ver la cantidad mediana de pacientes vistos en cualquier tipo de día de la semana.¿Por qué triplica la tripulación data.table (integer versus double)?
enc.per.day[,list(patient.encounters=median(n)),by=list(weekdays(DOS))]
Esa línea da un error
Error en
[.data.table
(enc.per.day,, lista (patient.encounters = mediana (n)),: columnas de j no evalúan a los tipos consistentes para cada grupo: resultado para el grupo 4 tiene la columna 1 de tipo 'entero', pero tipo esperando 'doble'
La siguiente todo bien trabajo
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))]
¿Qué está pasando? Me llevó mucho tiempo descubrir por qué mi código no funcionaría.
Por cierto, el vector subyacente enc.per.day $ n es un entero
storage.mode(enc.per.day$n)
devuelve "número entero". Además, no hay NA en ninguna parte de la tabla de datos.
@Matthew Dowle - Gracias por añadir esos detalles acerca de cómo * * data.table ** inicializa y asigna espacio para el vector de resultados. –
¿Es posible tener una mediana del mismo tipo que el valor? Por lo tanto, incluso si tuviera valores como = 1,1,1,2,2,2,2, no debería resultar en mediana = 1,5, sino que debería mostrar mediana = 2. – lony
Como un ejemplo de la sugerencia anterior, haga esto DT [, c (como .do (lapply (.SD, mediana)), .N), por = x, .SDcols = c ("x", "y "," z ")] en lugar de DT [, c (lapply (.SD, mediana), .N), por = x, .SDcols = c (" x "," y "," z ")] –