我有一个约35000个观测值和24个变量(其中一个是时间序列)的大型数据集,但是我可以总结一下我想使用虹膜实现的目标。
library(tidyverse)
iris.new <- iris %>%
arrange(Species, Sepal.Length, Sepal.Width) %>%
group_by(Species)
unwanted <- iris.new %>%
filter(Sepal.Length > 5 & Sepal.Width==min(Sepal.Width))
while(nrow(unwanted)!=0) {
iris.new <- iris.new %>%
arrange(Species, Sepal.Length, Sepal.Width) %>%
group_by(Species) %>%
filter(!(Sepal.Length > 5 & Sepal.Width == min(Sepal.Width)))
unwanted <- iris.new %>%
filter(Sepal.Length > 5 & Sepal.Width==min(Sepal.Width))
}
我只想过滤Sepal.Length> 5,对于每个物种,它在观察范围内的Sepal.Width最小(setosa和versicolor没有)。当我摆脱第一个时,我重复过滤器以查看是否存在任何过滤器,最后使用“ while”循环为我完成此操作。
有没有不用循环就可以过滤它们的方法?
答案 0 :(得分:0)
我认为这可以解决问题:
# get minimum Sepal.Width without Sepal.Length > 5
iris_min <- iris %>%
group_by(Species) %>%
filter(Sepal.Length <= 5) %>%
summarize(min_sep_width = min(Sepal.Width))
# check to see that nothing is below our minimum
# or equal to it with a Sepal.Length that's too long
iris_new <- iris %>%
left_join(iris_min, by = c('Species')) %>%
filter(min_sep_width < Sepal.Width |
(min_sep_width == Sepal.Width & Sepal.Length <= 5)) %>%
select(-min_sep_width)