R按列而不是按行聚合数据框

时间:2014-02-14 18:04:53

标签: r dataframe aggregate

我正在尝试按唯一列名称(日期)聚合此数据框的列。我一直在收到错误。我尝试过merge_all,merge_recurse和aggregate,但无法让它工作。我已经遇到了一个似乎无法用我的知识集进行的僵局,我无法找到有助于任何地方的答案。这甚至可能吗?数据框如下:

    2014-02-14  2014-02-14  2014-02-14  2014-02-21  2014-06-20  2014-06-20  2014-06-20  2014-09-19  Totals
PutWing 12  -6  0   171 7   -31 0   0   -77
Ten -6  0   0   24  -19 52  0   0   -10
Eighteen    -15 0   0   73  0   -70 0   0   100
Thirty  0   0   0   -149    41  64  0   0   -463
FortyTwo    0   0   0   -91 0   121 0   0   426
ATM 44  0   0   -118    -25 -199    0   0   -134
FortyTwoC   0   0   0   -67 14  0   0   0   792
ThirtyC 0   0   0   79  0   0   0   0   -509
EighteenC   61  0   0   -57 0   -32 0   0   20
CallWing    1   0   0   -48 0   0   0   0   -28
Totals  95  -6  0   -183    17  -95 0   0   116
SlopeRisk   0   0   0   26  5   -6  0   0   -26

1 个答案:

答案 0 :(得分:3)

假设您的数据位于df

df <- t(df)
rownames(df) <- substr(rownames(df), 1, 11)          # only necessary if you get funny row names from data import; if your data is as it's shown you can skip this step.
df.agg <- aggregate(df, by=list(rownames(df)), sum)
row.names(df.agg) <- df.agg[[1]]
t(df.agg[-1])

产地:

#           Totals X2014.02.14 X2014.02.21 X2014.06.20 X2014.09.19
# PutWing      -77           6         171         -24           0
# Ten          -10          -6          24          33           0
# Eighteen     100         -15          73         -70           0
# Thirty      -463           0        -149         105           0
# FortyTwo     426           0         -91         121           0
# ATM         -134          44        -118        -224           0
# FortyTwoC    792           0         -67          14           0
# ThirtyC     -509           0          79           0           0
# EighteenC     20          61         -57         -32           0
# CallWing     -28           1         -48           0           0
# Totals       116          89        -183         -78           0
# SlopeRisk    -26           0          26          -1           0    

基本上,您需要转置数据以使用R提供的所有group/apply函数。转置后,您也可以使用plyrdata.tabledplyr来代替aggregate进行聚合,但这些都是非基础包。< / p>

这需要清理列名等,但我会把它留给你。