2012-05-16 22 views
13

Estoy tratando de asignar datos a un dataframe existente con un nombre generado en un bucle. Un ejemplo básico podría serAsignar una columna de un data.frame con nombre de cadena en R

A = data.frame(a = c(1,2,3), b=c(3,6,2)) 

for (i in 1:2){ 
    name = paste("Name",i, sep="") 
    assign(name, c(6,3,2)) 
} 

Ahora sólo tiene que encontrar la manera de añadir nombre1 y nombre2 a la hoja.de.datos A, manteniendo su nombre asignado. Estoy seguro de que hay una respuesta fácil, simplemente no la veo ahora.

al final me gustaría terminar con

A 
#a b name1 name2 
#1 3 6  6 
#2 6 3  3 
#3 2 2  2 

pero tengo que hacer esto de una manera automática.

Por ejemplo, si se podía adaptar el bucle for a ser como

for (i in 1:2){ 
    name = paste("Name",i, sep="") 
    assign(name, c(6,3,2) 
    A= cbind(A, get(paste(name,i,sep=""))) # works but doesn't maintain the column name as name1 or name2 etc 
} 

esto sin embargo no mantiene los nombres de columna

+0

Esto es muy confuso lo que estás pidiendo. ¿Podría publicar lo que espera que se vea la salida? –

Respuesta

18

Las otras respuestas son buenas, pero si se fijan en el uso de un bucle como si tiene, entonces esto funcionaría:

A <- data.frame(a = c(1,2,3), b = c(3,6,2)) 

for (i in 1:2){ 
    A[paste("Name", i, sep="")] <- c(6,3,2) 
} 

lo que da

> A 
    a b Name1 Name2 
1 1 3  6  6 
2 2 6  3  3 
3 3 2  2  2 

Alternativamente, paste("Name", i, sep="") podrían ser reemplazados con paste0("Name", i)

+0

Eso ayuda mucho. Sí. 'A' no puede estar vacío antes de' for loop'. –

3

Tal vez usted quiere esto:

R> A <- data.frame(a=c(1,2,3), b=c(3,6,2)) 
R> colnames(A) <- paste("Names", 1:ncol(A), sep="") 
R> A 
    Names1 Names2 
1  1  3 
2  2  6 
3  3  2 
R> 

sino como Tyler dijo en el comentario, no está del todo claro lo que estás preguntando.

+0

Gracias por responder Acabo de aclarar lo que estaba buscando. – mmann1123

+0

Simplemente asigne cuatro columnas al principio, y luego los nombres cuando/donde/cómo las desee. Mi respuesta ya muestra 'colnames (A)', también puede asignar 'colnames (A) [3: 4]' o cualquier otra expresión válida. –

3

Aún no del todo seguro de lo que estamos tratando de lograr:

A = data.frame(a = c(1,2,3), b=c(3,6,2)) 
B <- data.frame(A, c(6, 3, 2), c(6, 3, 2)) 
names(B)[3:4] <- paste0("name", 1:2) 
B 

que produce:

a b name1 name2 
1 1 3  6  6 
2 2 6  3  3 
3 3 2  2  2 
Cuestiones relacionadas