dplyr在plyr中diamonds示例中的ddply等效

6

好的,我正在尝试理解dplyr,在R中使用它代替plyr。在我短暂的R学习经历中,我已经对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()语句,因为你只是在计算行数? - Ben Bolker
很酷,所以从技术上讲: t2.table <- group_by(diamonds, clarity, cut) %>% summarise(nrow=n()) -或者- 更好的可读性 t3.table <- diamonds %>% group_by(clarity, cut) %>% summarise(nrow=n()) - David Parker
2个回答

6
在最新版本的dplyr中,您可以将其简化为以下内容:
diamonds %>% count(clarity, cut)

如果您想保留列名“nrow”:

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

如果您的环境中已经加载了 plyr 或 rename,那么您可能需要添加前缀来重命名:

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

5

感谢您的帮助。我喜欢这个答案。虽然不如原始的ddply命令紧凑,但更易于阅读。 (旁注:回答问题很痛苦,需要改进)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接