library(tidyverse)iris <- irismeans <- iris %>% group_by(Species) %>% summarise_all(funs(mean))sd <- iris %>% group_by(Species) %>% summarise_all(funs(sd))bottom <- means[ ,2:5] - sd[ ,2:5]bottom$Species <- c("setosa", "versicolor", "virginica")print(bottom) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 4.653510 3.048936 1.288336 0.1406144 setosa 2 5.419829 2.456202 3.790089 1.1282473 versicolor 3 5.952120 2.651503 5.000105 1.7513499 virginicatop <- means[ ,2:5] + sd[ ,2:5]top$Species <- c("setosa", "versicolor", "virginica")print(top) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.358490 3.807064 1.635664 0.3513856 setosa 2 6.452171 3.083798 4.729911 1.5237527 versicolor 3 7.223880 3.296497 6.103895 2.3006501 virginica如何获取 Iris 的行,其中 Sepal.Length、Sepal.Width、Petal.Length 和 Petal.Width 的值都落在顶部和底部数据框中的值之间?例如,我只想要 setosa 行,其中 Sepal.Length > 4.65 & Sepal.Length 谢谢。 最佳答案 如果您可以在没有汇总步骤的情况下从头开始过滤,则会容易得多:iris %>% group_by(Species) %>% filter_if(is.numeric, all_vars(. < mean(.) + sd(.) & . > mean(.) - sd(.)))# A tibble: 54 x 5# Groups: Species [3]# Sepal.Length Sepal.Width Petal.Length Petal.Width Species# <dbl> <dbl> <dbl> <dbl> <fctr># 1 5.1 3.5 1.4 0.2 setosa# 2 4.7 3.2 1.3 0.2 setosa# 3 5.0 3.6 1.4 0.2 setosa# 4 5.0 3.4 1.5 0.2 setosa# 5 4.8 3.4 1.6 0.2 setosa# 6 5.1 3.5 1.4 0.3 setosa# 7 5.1 3.8 1.5 0.3 setosa# 8 5.2 3.5 1.5 0.2 setosa# 9 5.2 3.4 1.4 0.2 setosa#10 4.7 3.2 1.6 0.2 setosa# ... with 44 more rows不确定是否可以避免汇总步骤,请在此处作为选项发布。或使用 between :iris %>% group_by(Species) %>% filter_if(is.numeric, all_vars(between(., mean(.) - sd(.), mean(.) + sd(.))))关于r - 条件非对等连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46480349/
10-11 07:39