R在数据帧上每列的汇总操作上找到列操作的前n个结果

时间:2018-08-01 21:34:45

标签: r dataframe aggregate

说,我有一个称为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

1 个答案:

答案 0 :(得分:1)

这是使用示例数据的第一部分进行说明的一种方法。您可以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 package(v0.2.0)于2018-08-01创建。