2011-07-01 18 views
10

capisco che posso ordinare un data.frame come tale:R - Per un data.frame per nome colonna come CARATTERE

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

ma come faccio a ottenere la stessa cosa quando le colonne sono specificate per colonna nome come variabile del personaggio? Questo non sembra funzionare:

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

C'è un modo per convertire "B" a B in modo che la colonna si riconosce? Mi sembra di avere questo problema abbastanza spesso con funzioni che richiedono input di nomi di colonne. Esiste un termine per descrivere questo problema: spazio in R (identificatore di carattere contro identificatore di non carattere)?

+2

Devo dire che non capisco perché questa domanda non sia stata votata. Sembra chiedere assistenza per arrivare al "livello successivo" in astrazione. Se è un duplicato, l'elettore anonimo dovrebbe intervenire e mostrarci. –

+1

@DWin - Apprezzo il supporto! Sono stato anche confuso dal downvote. – SFun28

risposta

10

Prova invece:

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

Oppure:

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

La seconda forma permetterebbe di fare qualcosa di simile:

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

Per più di una colonna per ordinare il necessario utilizzare do.call (esempio dalla pagina di aiuto):

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

l'intento della mia domanda è di fornire "B" (o qualsiasi altra colonna) per nome in un personaggio. quindi immagino di avere una variabile toSort = c ("B", "A") – SFun28

+0

in altre parole, non so in anticipo quali colonne voglio ordinare ... Voglio fornire come parametro/variabile. aggiornato la mia domanda per rispecchiare questo – SFun28

+0

@ SFun25: vedere il mio addendum. –

Problemi correlati