error de dcast: ''Falta la función de agregación: el valor predeterminado es la longitud''
data.table reshape (1)
Mi
df
ve así:
Id Task Type Freq
3 1 A 2
3 1 B 3
3 2 A 3
3 2 B 0
4 1 A 3
4 1 B 3
4 2 A 1
4 2 B 3
Quiero reestructurar por Id y obtener:
Id A B … Z
3 5 3
4 4 6
Lo intenté:
df_wide <- dcast(df, Id + Task ~ Type, value.var="Freq")
y obtuve el error:
Falta la función de agregación: el valor predeterminado es la longitud
No puedo entender qué poner en la
fun.aggregate
.
fun.aggregate
.
¿Cuál es el problema?
La razón por la que recibe esta advertencia está en la descripción de
fun.aggregate
(vea
?dcast
):
función de agregación necesaria si las variables no identifican una sola observación para cada celda de salida. El valor predeterminado es la longitud (con un mensaje) si es necesario pero no se especifica
Por lo tanto, se necesita una función de agregación cuando hay más de un valor para un punto en el marco de datos amplio.
Una explicación basada en sus datos:
Cuando usa
dcast(df, Id + Task ~ Type, value.var="Freq")
obtiene:
Id Task A B
1 3 1 2 3
2 3 2 3 0
3 4 1 3 3
4 4 2 1 3
Lo cual es lógico porque para cada combinación de
Id
,
Task
y
Type
solo hay un valor en
Freq
.
Pero cuando usa
dcast(df, Id ~ Type, value.var="Freq")
obtiene esto (incluido un mensaje de advertencia):
Aggregation function missing: defaulting to length
Id A B
1 3 2 2
2 4 2 2
Ahora, mirando hacia atrás en la parte superior de sus datos:
Id Task Type Freq
3 1 A 2
3 1 B 3
3 2 A 3
3 2 B 0
Ya ves por qué este es el caso.
Para cada combinación de
Id
y
Type
hay dos valores en
Freq
(para Id 3:
2
y
3
para
A
y
3
y
0
para Tipo
B
), mientras que solo puede poner un valor en este lugar en el marco de datos amplio para cada valor de
type
.
Por
dcast
tanto,
dcast
quiere agregar estos valores en un solo valor.
La función de agregación predeterminada es la
length
, pero puede usar otras funciones de agregación como
sum
,
mean
,
sd
o una función personalizada al especificarlas con
fun.aggregate
.
Por ejemplo, con
fun.aggregate = sum
obtienes:
Id A B
1 3 5 3
2 4 4 6
Ahora no hay advertencia porque a
dcast
se le dice qué hacer cuando hay más de un valor: devolver la suma de los valores.