1

ddply が変数ごとにうまくまとめてグループ化していることがわかります。ddply で非常に大きなデータフレームを 1 回だけスキャンし、複数の変数のカウント (長さ) を提供したいと考えています。これはどのように行うことができますか?例:

inc <- c('inc123', 'inc332', 'inc231', 'inc492', 'inc872', 'inc983')
hw <- c('ss23', 'ss43', 'ss98', 'ss98', 'ss23', 'ss23')
app <- c('lkl', 'dsd', 'lkl', 'jhj', 'lkl', 'dsd')
srvc <- c('rr', 'oo', 'rr', 'qq', 'qq', 'pp')

df <- data.frame(inc, hw, app, srvc)
ddply(df, .(hw), summarise, count = length(inc))

上記により、一意のハードウェアの数がカウントされます。私が行った場合

ddply(df, .(hw, app, srvc), summarise, count = length(inc))

私の目的は失われました.ddplyはhw、app、srvcのすべての「一意の」組み合わせを取り、それらをカウントするためです。

3 つの変数すべてのカウントをワンショットで取得する方法はありますか? 結果の df は次のようになると予想されます (行数が異なる場合があります)。

    hw count
1 ss23     3
2 ss43     1
3 ss98     2

    app count
1   dsd     2
2   jhj     1
3 linux     1
4   lkl     2

  srvc count
1   oo     1
2   pp     1
3   qq     2
4   rr     2
4

2 に答える 2

1

plyr内部で何が行われるかはわかりませんがdata.table、式自体にある列のみを使用し、データを効果的にスキャンするのは 1 回だけです (列ごとに):

library(data.table)
dt = data.table(df)

lapply(c('hw', 'app', 'srvc'), function(name) dt[, .N, by = name])
于 2013-07-17T21:25:47.583 に答える