我有一个简短的问题,就是要按升序对具有不同行数的大数据框的列进行排序。
我在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
我希望有人能帮助我。谢谢!
答案 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]