R - упорядочить data.frame по имени столбца AS CHARACTER - PullRequest
10 голосов
/ 01 июля 2011

Я понимаю, что могу заказать data.frame следующим образом:

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

Но как мне сделать то же самое, если столбцы указаны по имени столбца как символьная переменная? Это не похоже на работу:

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

Есть ли способ преобразовать "B" в B, чтобы столбец был распознан? Я, кажется, часто сталкиваюсь с этой проблемой при использовании функций, которые вводят имена столбцов. Есть ли какой-то термин для описания этого проблемного пространства в R (символьный идентификатор или не символьный идентификатор)?

1 Ответ

12 голосов
/ 02 июля 2011

Попробуйте вместо:

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

Или:

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

Вторая форма позволит вам сделать что-то вроде:

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

Для заказа более одного столбца необходимо использовать do.call (пример со страницы справки):

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") ] ), ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...