簡體   English   中英

在R中使用plyr進行計數

[英]Using plyr in R to count

我正在嘗試為我擁有的數據文件計算摘要統計信息。 我看過幾篇關於類似主題的文章,但它們並沒有完全回答我的問題。 數據文件包含敏感材料,所以我不想共享它。 但是我將使用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()) ,但是沒有成功。

給定注釋中的示例,您可以使用以下內容計算團隊數量:

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
...

我是data.table包的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)

之后,通過此鍵進行的所有摘要操作(或搜索或通過...進行連接)都將更快。 您還可以在幾列上設置鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM