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.

Reforma especial en R

Considere un dataframe de 3×3 de tipo char:

“`{r}
example <- data.frame(one = c("a","b","c"),
two = c("a","b","b"),
three = c ("c","a","b"))

<pre><code><br />Quiero redimensionar estos datos a 6×2 y añadir el siguiente contenido:

“`{r}
desired <- data.frame(one = c(“a”,”a”,”b”,”b”,
“c”,”b”),
two = c(“a”,”c”,”b”,”a”,”b”,”b”))

Para el dataframe de ejemplo original, quiero unir por filas (rbind()) el contenido de example[,2:3] debajo de cada índice de fila.

Esto se puede lograr mediante:

ex <- as.matrix(example)

des <- as.data.frame(rbind(ex[,1:2], ex[,2:3]))

¿Tal vez sería más conveniente usar library(tidyverse) para un número arbitrario de columnas?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, utilizar tidyverse puede hacer esta tarea más fácil y flexible para un número arbitrario de columnas. Un enfoque consiste en utilizar pivot_longer() para convertir los datos a un formato largo, luego arrange() para ordenar las filas en función del índice de fila original, y finalmente pivot_wider() para remodelar los datos al formato deseado. Aquí está el código:

    “`{r}
    library(tidyverse)

    example %>%
    pivot_longer(everything()) %>%
    arrange(row_number()) %>%
    mutate(col = rep(c(1, 2), each = nrow(example))) %>%
    pivot_wider(names_from = col, values_from = value) %>%
    select(-name)
    “`

    Esto produce la misma salida que el dataframe desired:

    “`{r}

    A tibble: 6 x 2

    one two

    1 a a
    2 a c
    3 b b
    4 b a
    5 c b
    6 b b
    “`

Comments are closed.