2011-07-01 14 views
10

entiendo que puedo pedir un hoja.de.datos como tal:R - Para un hoja.de.datos por nombre de columna como el carácter

test = data.frame(A=c(4,2,4), B=c(8,3,2)) 
ordered = test[with(test, order(A,B)) , ] 

pero ¿cómo puedo lograr lo mismo cuando las columnas se especifican por la columna nombre como variable de caracter? Esto no parece funcionar:

test = data.frame(A=c(4,2,4), B=c(8,3,2)) 
cols = c("A" , "B") 
ordered = test[ with(test, order(cols)) , ] 

¿Hay alguna forma de convertir "B" a B para que se reconozca la columna? Parece que tengo este problema bastante a menudo con funciones que toman entradas de nombre de columna. ¿Hay algún término para describir este espacio de problema en R (identificador de carácter versus identificador de no carácter)?

+2

Debo decir que no entiendo por qué esta pregunta fue rechazada. Parece pedir ayuda para llegar al "siguiente nivel" en la abstracción. Si es un duplicado, entonces el votante anónimo debe intensificar y mostrarnos. –

+1

@DWin - ¡Aprecio la ayuda! Estaba confundido por el voto negativo también. – SFun28

Respuesta

10

Trate lugar:

ordered = test[ with(test, order(B)) , ] 

O:

ordered2 = test[ order(test[["B"]]) , ] 

La segunda forma le permitiría hacer algo como:

colnm <- "B" 
ordered2 = test[ order(test[[colnm]]) , ] 

Por más de una columna para ordenar lo que necesita para usar do.call (ejemplo de la página de ayuda):

d4 <- data.frame(x = round( rnorm(100)), y = round(10*runif(100)), 
        z = round(8*rnorm(100)), u = round(50*runif(100))) 
d4s <- d4[ do.call(order, d4[ , c("x", "y") ]), ] 
+0

el objetivo de mi pregunta es proporcionar "B" (o cualquier otra columna) por nombre en un personaje. así que imagine que tenía una variable toSort = c ("B", "A") – SFun28

+0

en otras palabras, no sé con anticipación qué columnas quiero ordenar ... Quiero proporcionar como parámetro/variable. actualicé mi pregunta para reflejar esto – SFun28

+0

@ SFun25: ver mi apéndice. –

Cuestiones relacionadas