2011-07-01 25 views
10

我明白,我可以为了一个data.frame这样:的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中的这个问题空间(字符标识符与非字符标识符)?

+2

我必须说我不明白为什么这个问题被低估了。它似乎要求帮助进入抽象的“下一个层次”。如果它是重复的,那么匿名选民应该加强并向我们展示。 –

+1

@DWin - 感谢支持!我也被downvote困惑了。 – SFun28

回答

10

尝试,而不是:

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

我的问题的意图是提供一个字符中的“B”(或任何其他列)名称。所以想象我有一个变量toSort = c(“B”,“A”) – SFun28

+0

换句话说,我不知道提前列出哪些列要排序...我想提供一个参数/变量。更新了我的问题以反映这 – SFun28

+0

@ SFun25:请参阅我的附录。 –

相关问题