我看到ddply很好地按变量汇总和分组。我希望ddply只扫描一个非常大的数据帧,并为多个变量提供一个计数(长度)。如何才能做到这一点?例如:
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))
以上将给出我对独特hw的数量的计数。如果我做
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
答案 0 :(得分:7)
您可以plyr::count
使用
require(plyr)
llply(c("hw", "app", "srvc"), function(col) count(df, vars = col))
## [[1]]
## hw freq
## 1 ss23 3
## 2 ss43 1
## 3 ss98 2
## [[2]]
## app freq
## 1 dsd 2
## 2 jhj 1
## 3 lkl 3
## [[3]]
## srvc freq
## 1 oo 1
## 2 pp 1
## 3 qq 2
## 4 rr 2
答案 1 :(得分:1)
我不知道plyr
内部做了什么,但data.table
只会使用表达式本身的列,只能有效地扫描数据一次(逐列): / p>
library(data.table)
dt = data.table(df)
lapply(c('hw', 'app', 'srvc'), function(name) dt[, .N, by = name])