dplyr:如何编写与table()基函数等效的函数并保留列名?

时间:2014-06-25 13:00:11

标签: r left-join calculated-columns dplyr

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

2 个答案:

答案 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