es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué dcast devuelve un resultado extraño? (Falta la función de agregación, se establece por defecto en ‘length’)

Cuando intento convertir un data.table largo a ancho, obtengo un resultado inesperado, como se muestra a continuación:

               Cause Period      RESULT
              <char>  <ord>      <char>
  1: Total, all c...      1 154.4 (0.3)
  2: Total, all c...      1 154.4 (0.3)
  3: Total, all c...      1 154.4 (0.3)
  4: Total, all c...      1 154.4 (0.3)
  5: Total, all c...      1 154.4 (0.3)

<hr>

<p>428: Information ...      4  34.8 (1.8)
429: Information ...      4  34.8 (1.8)
430: Information ...      4  34.8 (1.8)
431: Information ...      4  34.8 (1.8)
432: Information ...      4  34.8 (1.8)
> DT %>% dcast(Cause ~ Period)
Using 'Mean (skew)' as value column. Use 'value.var' to override
Aggregate function missing, defaulting to 'length'
             Cause     1     2     3     4
            <char> <int> <int> <int> <int>
1: Accidents (u...    12    12    12    12
2: COVID-19 [U0...    12    12    12    12
3: Diseases of ...    12    12    12    12
4: Ill-defined ...    12    12    12    12
5: Influenza an...    12    12    12    12
6: Information ...    12    12    12    12
7: Intentional ...    12    12    12    12
8: Malignant ne...    12    12    12    12
9: Total, all c...    12    12    12    12

En lugar de mostrarme las cadenas (como 154.4 (0.3)), me muestra la longitud de la cadena (12).

¿Qué estoy haciendo mal?

¿Qué fun.aggregate debo usar para que me muestre la cadena en lugar de su longitud?

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema es que dcast está tratando la columna RESULT como una variable de factor y, de forma predeterminada, está utilizando la función agregada length en ella. Para mostrar las cadenas, debes usar la función paste como argumento de fun.aggregate. Aquí tienes un ejemplo:

    {r}
    DT_wide <- dcast(DT, Cause ~ Period, value.var = "RESULT", fun.aggregate = paste)

    Esto concatenará todos los valores de RESULT para cada combinación de Cause y Periodo en una sola cadena. Puedes ajustar el separador y otras opciones de la función paste según sea necesario.

Comments are closed.