从dplyr应用group_by函数并使用%.%运算符后,如何访问分组数据
例如,如果我想拥有每个分组数据的第一行,那么我可以使用plyr包作为
ddply(iris,.(Species),function(df){
df[1,]
})
#output
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 7.0 3.2 4.7 1.4 versicolor
#3 6.3 3.3 6.0 2.5 virginica
Run Code Online (Sandbox Code Playgroud)
had*_*ley 13
对于您的具体情况,您可以使用row_number():
library(dplyr)
iris %.%
group_by(Species) %.%
filter(row_number(Species) == 1)
## Source: local data frame [3 x 5]
## Groups: Species
##
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 7.0 3.2 4.7 1.4 versicolor
## 3 6.3 3.3 6.0 2.5 virginica
Run Code Online (Sandbox Code Playgroud)
这在版本0.2中会更自然,因为您可以省略变量名称:
# devtools::install_github("hadley/dplyr")
iris %.%
group_by(Species) %.%
filter(row_number() == 1)
## Source: local data frame [3 x 5]
## Groups: Species
##
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 7.0 3.2 4.7 1.4 versicolor
## 3 6.3 3.3 6.0 2.5 virginica
Run Code Online (Sandbox Code Playgroud)
对于任意操作,do()在0.2中更有用.你给它任意表达式,.用作每个组的占位符:
iris %.%
group_by(Species) %.%
do(.[1, ])
## Source: local data frame [3 x 6]
## Groups: Species
##
## Species Sepal.Length Sepal.Width Petal.Length Petal.Width Species.1
## 1 setosa 5.1 3.5 1.4 0.2 setosa
## 2 versicolor 7.0 3.2 4.7 1.4 versicolor
## 3 virginica 6.3 3.3 6.0 2.5 virginica
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2913 次 |
| 最近记录: |