dplyr很快,我想使用%。%管道很多。 我想使用表函数(按频率计算)并保留列名,输出为data.frame。
如何仅使用dplyr函数实现与下面的代码相同(想象具有6M行的巨大data.table(BIGiris))
> out<-as.data.frame(table(iris$Species))
> names(out)[1]<-'Species'
> names(out)[2]<-'my_cnt1'
> out
输出就是这个。请注意,我必须重命名第1列。另外,在dplyr mutate或其他调用中 - 我想以某种方式指定新计数列的名称。
Species my_cnt1
1 setosa 50
2 versicolor 50
3 virginica 50
想象加入这样的表(假设iris data.frame有6M行),物种更像是&#34; species_ID&#34;
> habitat<-data.frame(Species=c('setosa'),lives_in='sea')
最终加入和输出(为了加入,我需要一直保留列名)
> left_join(out,habitat)
Joining by: "Species"
Species my_cnt1 lives_in
1 setosa 50 sea
2 versicolor 50 <NA>
3 virginica 50 <NA>
>
答案 0 :(得分:8)
对于第一部分,您可以像这样使用dplyr
library(dplyr)
out <- iris %>% group_by(Species) %>% summarise(my_cnt1 = n())
out
Source: local data frame [3 x 2]
Species my_cnt1
1 setosa 50
2 versicolor 50
3 virginica 50
要继续在一个链中执行此操作:
out <- iris %>% group_by(Species) %>% summarise(my_cnt1 = n()) %>% left_join(habitat)
out
Source: local data frame [3 x 3]
Species my_cnt1 lives_in
1 setosa 50 sea
2 versicolor 50 NA
3 virginica 50 NA
顺便说一下,dplyr
现在使用%>%
代替%.%
。它也做同样的事情,也是包magrittr
的一部分。
答案 1 :(得分:0)
或者您可以简单地附加数据帧然后运行表函数。这也将显示列名称。
> attach(iris)
> table(Species)
Species
setosa versicolor virginica
50 50 50