R - 按列名AS CHARACTER对data.frame进行排序

时间:2011-07-01 19:53:56

标签: r

我知道我可以订购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 个答案:

答案 0 :(得分:12)

尝试改为:

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") ] ), ]