gpt4 book ai didi

r - 条件非对等连接

转载 作者:行者123 更新时间:2023-12-05 00:14:41 24 4
gpt4 key购买 nike

library(tidyverse)

iris <- iris

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

top <- 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 < 5.35 和 Sepal.Width 在 3.04 和 3.80 之间等。理想情况下,最终结果只包含 4 个数字列和物种列。

谢谢。

最佳答案

如果您可以在没有汇总步骤的情况下从头开始过滤,则会容易得多:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com