我知道我可以订购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中的这个问题空间(字符标识符与非字符标识符)?
答案 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") ] ), ]