使用iris
数据集添加了下面创建的Year
列,我想按Species
和Year
进行分组,以选择Year
}每个species
的最大观察数。
iris$Year <- c(rep(c("2007", "2008"), each = 25),
rep(c("2007", "2008"), times = c(10, 40)),
rep(c("2007", "2008"), times = c(40, 10)))
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Year
1 5.1 3.5 1.4 0.2 setosa 2007
2 4.9 3.0 1.4 0.2 setosa 2007
3 4.7 3.2 1.3 0.2 setosa 2007
4 4.6 3.1 1.5 0.2 setosa 2007
5 5.0 3.6 1.4 0.2 setosa 2007
6 5.4 3.9 1.7 0.4 setosa 2007
如下面的摘要表所示,2007
和2008
都有setosa
的25个观察值(行)。当观察数量存在关联时,我想选择最小Year
。
简而言之,我试图从上面的可重复数据集中仅选择setosa 2007,versicolor 2008和virginica 2007,优先使用dplyr
编辑请注意,我想从上面创建的iris
数据中选择相应的种 - 年组合,而不是创建汇总表。换句话说,我希望将iris
子集仅包括setosa 2007,versicolor 2008和virginica 2007(即具有最大观察数的最小年份)。对困惑感到抱歉。 结束修改
library(dplyr)
iris %>%
group_by(Species, Year) %>%
summarise(N = n()) %>%
as.data.frame()
Species Year N
1 setosa 2007 25
2 setosa 2008 25
3 versicolor 2007 10
4 versicolor 2008 40
5 virginica 2007 40
6 virginica 2008 10
答案 0 :(得分:4)
你已经到了一半。你需要按照物种进行分组,根据你想要的东西进行分类,然后从每个物种中取出最上面一行。
iris %>%
group_by(Species, Year) %>%
summarise(N = n()) %>%
group_by(Species) %>%
arrange(desc(N), Year) %>%
slice(1)
# # A tibble: 3 x 3
# # Groups: Species [3]
# Species Year N
# <fctr> <chr> <int>
# 1 setosa 2007 25
# 2 versicolor 2008 40
# 3 virginica 2007 40
如果你想保持关系而不是打破关系,你可以用arrange %>% slice
替换filter(N == max(N))
。