2015-12-13 157 views
0

我的问题类似于其他排序/排序问题,但不相同。问题基本上是如何在将要排序的列存储在变量中时对R中的数据框或数据表进行排序/排序。R使用变量排序/排序数据框

说我有一个数据帧

#create data frame 
df <- data.frame(a=c(2,2,2,2,1,1,3,3,3,3,4,4), 
       b=c("c","c","a","a","a","b","b","d","d","d","e","e"), 
       c=c(123,223,1232,122,1232,345,243,456,5676,34,233,111), 
       stringsAsFactors=F) 

有许多方法订购的数据帧。一些基本的方法是:

#ordering dataframe by column 1 
df[with(df,order(df[,1])), ] 
#ordering dataframe by column name 'a' 
df[with(df,order(df[,"a"])), ] 

同样,数据表:

library(data.table) 
dt <- as.data.table(df) 
dt[order(a)] 

但是,如果我的专栏被存储在一个变量var,我怎么使用的顺序?

#sort by column 1 
var <- 1 

#sort by column name "a" 
var <- "a" 

更进一步,我该如何排序多列?

#sort by columns 1 and 2 
var1 <- 1 
var2 <- 2 
+1

你可以做'VAR < - “一”; setorderv(dt,var)'为你的第二种情况。或'var < - 1; setorderv(dt,names(dt)[var])'您的第一个案例。另外,为什么你不能只用'data.frame'来做'df [order(df [,var]),]'?你的问题很不明确。 –

+1

根据你的编辑,你可以做'df [do.call(order,c(df [,c(var1,var2)],df)),]'或setorderv(dt,names(dt)[c(var1 ,var2)])'。但为什么不把它们存储在同一个矢量中呢? –

+1

我的猜测这是某种类型的这个笨蛋http://stackoverflow.com/questions/28026579/order-dataframe-for-given-columns –

回答

0

试试这个

df[order(df[[var]]),] 

编辑感谢大卫 或者这个,如果你有多个条件

df[order(df[,var]),]

+0

这不会为一个向量工作。 –

+0

@DavidArenburg这是真实的,但我认为他的原始问题只是需要存储在变量中的列。你的回答更通用 –

+0

你能解释一下使用'[]'和'[[]]'的区别吗?另外,如果我的变量有多个列,这似乎不起作用。例如。 var < - c(“a”,“b”)或var < - c(1,2)'。 – rmf