首页 > 解决方案 > R在数据帧上找到每列聚合操作的列操作的前n个结果

问题描述

假设我有一个名为 RaM 的数据框,其中包含累积返回值。在这种情况下,它们实际上只是单行累积返回值以及列标题,但我想将逻辑不仅仅应用于单行数据帧。

假设我想按每列的最大累积返回值,甚至是平均值,或者每列的总和进行排序。

因此,每列都将重新排序,以便比较每列的最大累积回报,最高回报成为第一列,最小值是最后一列

然后说我想得出前 10 名(重新排列后的第 10 列),甚至是前 10%。

我知道如何得出列平均值,但我不知道如何有效地进行剩余的操作。有一个 order 函数,但是当我使用它时,它删除了我需要的列名。然后我可以轻松地删除第一列,比如 10 列,但是有没有办法保留名称?我认为我不能轻松地从无序的原始数据框中提取名称并将其与我的按聚合数据框排序的数据一起应用。我的目标是根据整个数据帧的列聚合函数提取前 n 列(在数据帧 RaM 中)的列名。

就像是

top10 <- getTop10ColumnNames(colSums(RaM))

然后将根据来自 RaM 的总和输出前 10 列的数据框

这是 RAM 的输出

> head(RaM,2)
                 ABMD        ACAD       ALGN        ALNY        ANIP      ASCMA        AVGO        CALD        CLVS       CORT
2013-01-31 0.03794643 0.296774194 0.13009009  0.32219178  0.13008130 0.02857604  0.13014640 -0.07929515  0.23375000  0.5174825
2013-02-28 0.14982079 0.006633499 0.00255102 -0.01823456 -0.05755396 0.07659708 -0.04333138  0.04066986 -0.04457953 -0.2465438
                  CPST         EA         EGY        EXEL FCSC       FOLD        GNC         GTT      HEAR          HK         HZNP
2013-01-31 -0.05269663 0.08333333 -0.01849711  0.01969365    0  0.4179104 0.07992677 0.250000000 0.2017417  0.10404624 -0.085836910
2013-02-28  0.15051595 0.11443102 -0.04475854 -0.02145923    0 -0.2947368 0.14079036 0.002857143 0.4239130 -0.07068063 -0.009389671
                  ICON        IMI        IMMU        INFI        INSY        KEG        LGND        LQDT         MCF        MU
2013-01-31  0.07750896 0.05393258 -0.01027397 -0.01571429 -0.05806459 0.16978417 -0.03085824 -0.22001958  0.01345609 0.1924290
2013-02-28 -0.01746362 0.03091684 -0.20415225  0.19854862  0.36849503 0.05535055  0.02189055  0.06840289 -0.09713487 0.1078042
                NBIX      NFLX       NVDA       OREX       PFPT          PQ       PRTA         PTX        RAS        REXX        RTRX
2013-01-31 0.2112299 0.7846467 0.00000000 0.08950306 0.06823721  0.03838384 -0.1800819  0.04387097 0.23852335 0.008448541  0.34328358
2013-02-28 0.1677704 0.1382251 0.03888981 0.04020979 0.06311787 -0.25291829  0.0266223 -0.26328801 0.05079882 0.026656512 -0.02222222
                  SDRL      SHOS         SSI        STMP         TAL         TREE        TSLA      TTWO        UVE       VICL
2013-01-31  0.07826093 0.2023956 -0.07788381  0.07103175 -0.14166875 -0.030504714  0.10746974 0.1053588  0.0365299  0.2302405
2013-02-28 -0.07585546 0.1384419  0.08052150 -0.09633197  0.08009728 -0.002860412 -0.07144761 0.2029581 -0.0330408 -0.1061453
                   VSI       VVUS        WLB
2013-01-31  0.06485356 -0.0976155 0.07494647
2013-02-28 -0.13965291 -0.1156069 0.04581673

标签: rdataframeaggregate

解决方案


这是使用示例数据的第一部分进行说明的一种方法。您可以gather将所有列向上,以便我们可以更轻松地进行汇总计算,按您想要的组计算所有汇总,然后使用arrange. 在这里,我首先订购了最高金额,但您可以按照自己的意愿进行订购。

library(tidyverse)
ram <- read_table2(
  "ABMD        ACAD       ALGN        ALNY        ANIP      ASCMA        AVGO        CALD        CLVS       CORT
0.03794643 0.296774194 0.13009009  0.32219178  0.13008130 0.02857604  0.13014640 -0.07929515  0.23375000  0.5174825
0.14982079 0.006633499 0.00255102 -0.01823456 -0.05755396 0.07659708 -0.04333138  0.04066986 -0.04457953 -0.2465438"
)
summary <- ram %>%
  gather(colname, value) %>%
  group_by(colname) %>%
  summarise_at(.vars = vars(value), .funs = funs(mean = mean, sum = sum, max = max)) %>%
  arrange(desc(sum))
summary
#> # A tibble: 10 x 4
#>    colname    mean     sum    max
#>    <chr>     <dbl>   <dbl>  <dbl>
#>  1 ALNY     0.152   0.304  0.322 
#>  2 ACAD     0.152   0.303  0.297 
#>  3 CORT     0.135   0.271  0.517 
#>  4 CLVS     0.0946  0.189  0.234 
#>  5 ABMD     0.0939  0.188  0.150 
#>  6 ALGN     0.0663  0.133  0.130 
#>  7 ASCMA    0.0526  0.105  0.0766
#>  8 AVGO     0.0434  0.0868 0.130 
#>  9 ANIP     0.0363  0.0725 0.130 
#> 10 CALD    -0.0193 -0.0386 0.0407

如果您想重新排序原始数据框,您可以从此摘要输出中获取顺序并使用它进行索引:

ram[summary$colname]
#> # A tibble: 2 x 10
#>      ALNY    ACAD   CORT    CLVS   ABMD    ALGN  ASCMA    AVGO    ANIP
#>     <dbl>   <dbl>  <dbl>   <dbl>  <dbl>   <dbl>  <dbl>   <dbl>   <dbl>
#> 1  0.322  0.297    0.517  0.234  0.0379 0.130   0.0286  0.130   0.130 
#> 2 -0.0182 0.00663 -0.247 -0.0446 0.150  0.00255 0.0766 -0.0433 -0.0576
#> # ... with 1 more variable: CALD <dbl>

reprex 包(v0.2.0)于 2018 年 8 月 1 日创建。


推荐阅读