2014-09-11 50 views
3

好的,我試圖用dplae替代plyr來包裹我的頭。在我與R的短暫時間裏,我已經習慣了ddply。我正在使用一個「簡單」的例子來說明如何在plyr中使用dplyr而不是ddply。這裏是:在下面:dplyr相當於plyr鑽石中的ddply示例

t1.table <- ddply(diamonds, c("clarity", "cut"), "nrow") 

我收到一個清晰和切割鑽石計數摘要表。在dplyr中,我能想到的最簡單的例子是:

diamonds %>% select(clarity, cut) %>% group_by(clarity, cut) %>% 
    summarise(count=n()) -> t2.table 

這似乎有點牽扯。有沒有更好的方法來簡化這一點? 〜謝謝

+2

我不認爲你需要'select()'語句,因爲你只是計算行? – 2014-09-11 12:34:00

+0

酷,所以在技術上:t2.table < - group_by(diamonds,clarity,cut)%>%summarize(nrow = n()) - 或者 - 可讀性更好 t3.table < - diamonds%>%group_by )%>%summarize(nrow = n()) – 2014-09-11 14:36:34

回答

3

感謝您的幫助。我喜歡這個答案。不像原來的ddply命令那麼緊湊,但是更具可讀性。 (邊注:回答一個問題是一種痛苦,需要工作)

t3.table <- diamonds %>% group_by(clarity, cut) %>% summarise(nrow=n()) 
+1

另請參閱'tally()'和https://github.com/hadley/dplyr/issues/358 – hadley 2014-09-13 14:11:06

2

在dplyr的最新版本,你可以簡化到這一點:

diamonds %>% count(clarity, cut) 

或者,如果你想保留列名稱「nrow」:

diamonds %>% count(clarity, cut) %>% rename(nrow = n) 

如果你有plyr或環境中的重命名加載,那麼你可能需要的前綴命名:

diamonds %>% count(clarity, cut) %>% dplyr::rename(nrow = n)