以升序对行号不同的大数据框的列进行排序

时间:2018-09-21 13:06:37

标签: r

我有一个简短的问题,就是要按升序对具有不同行数的大数据框的列进行排序。

我在R中的数据框是这样的,但要大得多:

 D          I        S       ...

 111       2012     1000
 111       2012     2000
 111       2012     1000
 111       2014     2000
 111       2013     1000
 111       2013     2000

我想计算每个因子有多少个因子水平,并以降序对每一列进行排序,因此最重要的因子在第一行中,如下所示:

D     Count          I    Count           S    Count    ...

 111     6           2012      3          1000     3
                     2013      2          2000     3
                     2014      1  

现在我想按升序对列进行排序,以便获得如下所示的数据框:

D     Count          S    Count           I    Count    ...

 111     6           1000      3          2012     3
                     2000      3          2013     2
                                          2014     1  

我希望有人能帮助我。谢谢!

2 个答案:

答案 0 :(得分:0)

使用data.table,您可以尝试以下操作。 对于第一部分:

data_set <- read.table(header = TRUE, text='D   I   S
111 2012    1000
111 2012    2000
111 2012    1000
111 2014    2000
111 2013    1000
111 2013    2000')

library(data.table)
lst <- lapply(c("D","I","S"), function(x) setDT(data_set)[, 
                                          .(Count = .N), by = x][order(-Count)])
[[1]]
     D Count
1: 111     6

[[2]]
      I Count
1: 2012     3
2: 2013     2
3: 2014     1

[[3]]
      S Count
1: 1000     3
2: 2000     3

第二部分,您只是

lst[order(sapply(lst,dim)[1,])]

[[1]]
     D Count
1: 111     6

[[2]]
      S Count
1: 1000     3
2: 2000     3

[[3]]
      I Count
1: 2012     3
2: 2013     2
3: 2014     1

答案 1 :(得分:0)

是否要根据每列的唯一实例数对列进行排序?然后这可能会起作用(假设您的数据帧在此处称为df):

ord <- order(sapply(df, function(col)length(unique(col))))
df[,ord]