vectores varias unir matrices intercalar intercalando graficas elementos dev concatenar como combinar r dataframe

varias - unir dos vectores matlab



Cómo combinar dos vectores en un marco de datos. (7)

Alt simplificación de arriba:

cond <-c(1,2,3) rating <-c(100,200,300) df <- data.frame(cond, rating) df cond rating 1 1 100 2 2 200 3 3 300

Tengo dos vectores como este

x <-c(1,2,3) y <-c(100,200,300) x_name <- "cond" y_name <- "rating"

Me gustaría mostrar el marco de datos de esta manera:

> print(df) cond rating 1 x 1 2 x 2 3 x 3 4 y 100 5 y 200 6 y 300

¿Cuál es la manera de hacerlo?


Aquí hay una función simple. Genera un marco de datos y utiliza automáticamente los nombres de los vectores como valores para la primera columna.

myfunc <- function(a, b, names = NULL) { setNames(data.frame(c(rep(deparse(substitute(a)), length(a)), rep(deparse(substitute(b)), length(b))), c(a, b)), names) }

Un ejemplo:

x <-c(1,2,3) y <-c(100,200,300) x_name <- "cond" y_name <- "rating" myfunc(x, y, c(x_name, y_name)) cond rating 1 x 1 2 x 2 3 x 3 4 y 100 5 y 200 6 y 300


Esto debería hacer el truco, para producir el marco de datos que solicitó, utilizando solo la base R:

df <- data.frame(cond=c(rep("x", times=length(x)), rep("y", times=length(y))), rating=c(x, y)) df cond rating 1 x 1 2 x 2 3 x 3 4 y 100 5 y 200 6 y 300

Sin embargo, a partir de su descripción inicial, diría que este es quizás un caso de uso más probable:

df2 <- data.frame(x, y) colnames(df2) <- c(x_name, y_name) df2 cond rating 1 1 100 2 2 200 3 3 300

[editar: paréntesis movidos en el ejemplo 1]


Puedes usar la función expand.grid ().

x <-c(1,2,3) y <-c(100,200,300) expand.grid(cond=x,rating=y)


Si bien esto no responde a la pregunta formulada, responde a una pregunta relacionada que muchas personas han tenido:

x <-c(1,2,3) y <-c(100,200,300) x_name <- "cond" y_name <- "rating" df <- data.frame(x,y) names(df) <- c(x_name,y_name) print(df) cond rating 1 1 100 2 2 200 3 3 300


df = data.frame(cond=c(rep("x",3),rep("y",3)),rating=c(x,y))


x <-c(1,2,3) y <-c(100,200,300) x_name <- "cond" y_name <- "rating" require(reshape2) df <- melt(data.frame(x,y)) colnames(df) <- c(x_name, y_name) print(df)

ACTUALIZACIÓN (2017-02-07): Como respuesta al comentario de @cdaringe: hay varias soluciones posibles, una de ellas se encuentra a continuación.

library(dplyr) library(magrittr) x <- c(1, 2, 3) y <- c(100, 200, 300) z <- c(1, 2, 3, 4, 5) x_name <- "cond" y_name <- "rating" # Helper function to create data.frame for the chunk of the data prepare <- function(name, value, xname = x_name, yname = y_name) { data_frame(rep(name, length(value)), value) %>% set_colnames(c(xname, yname)) } bind_rows( prepare("x", x), prepare("y", y), prepare("z", z) )