[英]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$team)],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.