2015-05-16 6 views
1

Я хочу использовать функцию order() в R для сортировки данных по столбцу.Как отсортировать данные по назначенному имени для столбца

Например, с data.frame ниже

set.seed(1) 
mydata <-as.data.frame(cbind(NUM=seq(1:5),RES=runif(5,0,10))) 

> with(data = mydata, mydata[order(RES),]) 
    NUM  RES 
5 5 2.016819 
1 1 2.655087 
2 2 3.721239 
3 3 5.728534 
4 4 9.082078 

Это нормально. Но когда я делаю то же самое с назначенным именем для столбца, я получил неожиданный результат.

colname <- "RES" 

> with(data = mydata, mydata[order(colname),]) 
    NUM  RES 
1 1 2.655087 

Мне интересно, сталкивался ли кто-либо с той же проблемой и/или если у вас есть решение для этого. Цените свою помощь заранее.

+0

Я думаю, 'с()' немного избыточна здесь. Вместо этого я бы просто квалифицировал столбец под data.frame. Для случая имени жесткого кодированного столбца это будет 'mydata [order (mydata $ RES),]', а для случая имени столбца переменной это будет 'mydata [order (mydata [, colname]), ] ', или, если хотите,' mydata [order (mydata [[colname]])]]. – bgoldst

ответ

1

Использование get() вернуть значение имени объекта:

with(data = mydata, mydata[order(get(colname)),]) 

# NUM  RES 
#5 5 2.016819 
#1 1 2.655087 
#2 2 3.721239 
#3 3 5.728534 
#4 4 9.082078