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)'')))