如何将llply()或lapply()应用于llply()或lapply()生成的列表组件

时间:2012-06-05 03:51:14

标签: r

我正在使用cl_tabulate获取2009年KDD Cup样本数据的一些统计数据。 以下是df.trainbase的示例部分,我正在使用的数据......

    > sample <- df.trainbase[4100:4110,220:223]
    > sample
      Var220  Var221  Var222     Var223
      4100 qcEoI0_    oslk fXLavGi LM8l689qOp
      4101 OTg4K41    oslk N9WHLT9 LM8l689qOp
      4102 54petck    oslk eEfa_vf LM8l689qOp
      4103 m_dAM23    oslk nFzwuDg LM8l689qOp
      4104 ROeipLp    zCkv K2SqEo9 LM8l689qOp
      4105 4UxGlow    oslk catzS2D LM8l689qOp
      4106 rDm6pd1    oslk Q53Rkup LM8l689qOp
      4107 XqwYlW4    oslk sMvE4Qn LM8l689qOp
      4108 EncOVQC    oslk 8AGQQMs LM8l689qOp
      4109 b0v7gqP d0EEeJi 80xXg6w LM8l689qOp
      4110 3aBfc8E    oslk aXcOEra LM8l689qOp

    > tabs <- llply(sample,cl_tabulate)

选项卡列表如下所示(显示了2个列表元素):

    > tabs
      $Var220
       values counts
    1  qcEoI0_      1
    2  OTg4K41      1
    3  54petck      1
    4  m_dAM23      1
    5  ROeipLp      1
    6  4UxGlow      1
    7  rDm6pd1      1
    8  XqwYlW4      1
    9  EncOVQC      1
    10 b0v7gqP      1
    11 3aBfc8E      1

    $Var221
     values counts
    1    oslk      9
    2    zCkv      1
    3 d0EEeJi      1

我可以得到指定列表元素(即数据列)最常用的级别值的数字,如下所示:

    > max(tabs[[1]]$counts)

      [1] 37216

但是如何为所有max(tabs[[i]]$counts)获取i(例如,如果可能,请使用llply())?我需要最流行级别的值以及每列发生的次数:

理想情况下,最终结果是每个变量的一个简单行,具有变量名称,最流行的因子值和出现次数 - 以Var196为例:

    Var196   1K8T    49550

是否可以将嵌套列表(例如上面的'tabs')传递给llply()并将其指向结构列级别下面的某个元素?我没有看到它。

...解决方案(下方)是使用melt()

    > m = melt(tabs, id="values")
    > m <- m[-2]
    > m

    values value     L1
    1     qcEoI0_     1 Var220
    2     OTg4K41     1 Var220
    3     54petck     1 Var220
    4     m_dAM23     1 Var220
    5     ROeipLp     1 Var220
    6     4UxGlow     1 Var220
    7     rDm6pd1     1 Var220
    8     XqwYlW4     1 Var220
    9     EncOVQC     1 Var220
    10    b0v7gqP     1 Var220
    11    3aBfc8E     1 Var220
    12       oslk     9 Var221
    13       zCkv     1 Var221
    ...

这正是我所需要的。

0 个答案:

没有答案