-1

我正在尝试计算我拥有的数据文件的摘要统计信息。我看过几篇关于类似主题的文章,但它们并没有完全回答我的问题。数据文件包含敏感材料,所以我不想分享它。但我将使用 plyr 中的棒球数据集来演示我正在尝试做的事情。

我正在尝试计算汇总统计数据表,其中一个统计数据需要对因子变量的唯一元素进行计数。因此,例如,如果我们使用棒球包,我将如何查找每个球员曾效力过多少支球队并将其附加到数据集的其余部分(数据集的其余部分是我在每玩家基础)?

ddply(baseball, "id", summarise, total_games=sum(g),    
      still_active=ifelse(max(year) ==‌ 2007,"Yes","No"),
      number_teams=as.data.frame(
          with(baseball[!duplicated(baseball$te‌​am)],table(id))))

上面是一个例子,最后一个参数是我正在努力的那个。我如何找到每个球员参加过的球队数量?我一直在尝试使用 as.data.frame(table()),但没有成功。

4

2 回答 2

2

鉴于您评论中的示例,您可以使用以下方法来计算团队数:

ddply(baseball,"id",summarise,total_games=sum(g),
      still_active=ifelse(max(year)==2007,"Yes","No"),
      number_teams=length(unique(team)))

这使 :

            id total_games still_active number_teams
1    aaronha01        3298           No            3
2    abernte02         681           No            7
3    adairje01        1165           No            4
4    adamsba01         482           No            2
5    adamsbo03        1281           No            4
6    adcocjo01        1959           No            5
7    agostju01         543           No            5
8    aguilri01         730           No            4
9    aguirha01         447           No            4
10   ainsmed01        1078           No            5
...
于 2013-10-04T21:43:46.257 回答
2

我是 package 的忠实粉丝data.table——一旦你掌握了语法,它就会让这个请求和其他请求变得更加容易:

library(data.table)
bb <- data.table(baseball)
bb[, list(
       games = sum(g), 
       teams = length(unique(team)), 
       home.runs = sum(hr), 
       still.active = max(year) == 2007), 
   by = id]

结果是

             id games teams home.runs still.active
   1: ansonca01  2523     3        97        FALSE
   2: forceda01  1029    10         1        FALSE
   3: mathebo01   623     8         1        FALSE
   4: startjo01  1071     6        15        FALSE
   5: suttoez01  1263     4        25        FALSE
  ---                                             
1224: sweenma01  1120     7        42         TRUE
1225: walketo04  1288     7       107         TRUE
1226: witasja01   284     7         0         TRUE
1227: graffto01   974     6        58         TRUE
1228: perezne01  1403     5        64         TRUE

另一个优点data.table是它通常更快,因为您可以通过设置键对数据表进行排序:

setkey(bb, id)

之后,此键(或搜索,或加入...)的每个摘要操作都会快得多。您还可以在多个列上设置键。

于 2013-10-04T21:46:00.090 回答