transformar seleccionar matrices manipulacion filas eliminar datos data conjunto columnas r

seleccionar - Variable como nombre de columna en el marco de datos



seleccionar un conjunto de datos en r (3)

Además de la respuesta de ssdecontrol, hay una segunda opción.

Estas buscando mget Primero asigne el nombre a la variable, luego el valor a la variable que haya asignado previamente. Después de eso, mget evaluará la cadena y la pasará a data.frame.

assign(col.name, "col1") assign(paste(col.name), 1:4) df <- data.frame(mget(col.name)) print(df) col1 1 1 2 2 3 3 4 4

¿Hay alguna forma de usar la cadena almacenada en la variable como un nombre de columna en un nuevo marco de datos? El resultado esperado debe ser:

col.name <- ''col1'' df <- data.frame(col.name=1:4) print(df) # Real output col.name 1 1 2 2 3 3 4 4 # Expected output col1 1 1 2 2 3 3 4 4

Soy consciente de que puedo crear un marco de datos y luego usar names () para cambiar el nombre de la columna o usar df [, col.name] para el objeto existente, pero me gustaría saber si hay alguna otra solución que pueda usarse durante la creación de marco de datos.


No puedes pasar una variable al nombre de un argumento como ese.

En su lugar, lo que puedes hacer es:

df <- data.frame(placeholder_name = 1:4) names(df)[names(df) == "placeholder_name"] <- col.name

o use el nombre predeterminado de "V1" :

df <- data.frame(1:4) names(df)[names(df) == "V1"] <- col.name

o asignar por puesto:

df <- data.frame(1:4) names(df)[1] <- col.name

o si solo tiene una columna, simplemente reemplace el atributo de names completo:

df <- data.frame(1:4) names(df) <- col.name

También está la función set_names en el paquete magrittr que puede usar para hacer esta última solución en un solo paso:

library(magrittr) df <- set_names(data.frame(1:4), col.name)

Pero set_names es solo un alias para:

df <- `names<-`(data.frame(1:4), col.name)

que es parte de la base R. Averiguar por qué esta expresión funciona y tiene sentido será un buen ejercicio.


No te recomiendo que hagas esto, pero:

col.name <- ''col1'' eval(parse(text=paste0(''data.frame('', col.name, ''=1:4)'')))