【问题标题】:Sort the columns of a big Dataframe with different number of lines in ascending order按升序对具有不同行数的大数据框的列进行排序
【发布时间】:2018-09-21 13:06:36
【问题描述】:

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

我在 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  

我希望有人可以帮助我。谢谢!

【问题讨论】:

  • 不清楚你想如何对列进行排序。你能提供更多细节吗?
  • 您好,感谢您的帮助,我想为您提供更多详细信息。这些列有不同的行数,我想按升序对它们进行排序,所以左边是最短的,只有一行,右边它们越来越大。我希望你能帮助我。谢谢
  • 我明白了。检查我的答案中的更新。感谢您的澄清。

标签: r


【解决方案1】:

使用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

【讨论】:

  • 第一部分非常完美。非常感谢你!你对第二部分也有什么想法吗?
  • 正如我所说,为此您需要提供您正在寻找哪种类型的详细信息,因为您现在的问题可以通过多种方式进行解释。
  • 哇,完美!只是一件小事,我把它看作是闪亮的 data.table,现在我想在所有列之后获得一条更大的线或其他东西来表明该计数属于左因子级别。你有什么想法
  • 您能否提出一个新问题或提供您正在寻找的输出。我一定会尽力提供帮助的。
  • 好的,谢谢,我在这里尝试描述一个新问题:stackoverflow.com/questions/52455693/…
【解决方案2】:

是否要根据每列的唯一实例数对列进行排序?那么这可能会起作用(假设您的数据框在这里被称为 df ):

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

【讨论】:

    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2011-11-12
    相关资源
    最近更新 更多