当前位置:  开发笔记 > 编程语言 > 正文

如何在R中按组省略两个最高值和最低值的行

如何解决《如何在R中按组省略两个最高值和最低值的行》经验,为你挑选了1个好方法。

这似乎是一个非常基本的问题,但我似乎无法找到解决方案.

你怎么去掉两个最高及的(三级)行的最低值variable由R中的几个因素是什么?我已经修改airquality了一点来得到一个例子(抱歉,我还是初学者):

set.seed(1)
airquality$var1 <- c(sample(1:3, 153, replace=T))
airquality$var2 <- c(sample(1:2, 153, replace=T))
airquality2 <- airquality
airquality2$Solar.R <- as.numeric(airquality2$Solar.R)
airquality2$Solar.R <- airquality2$Solar.R*2
airquality3 <- airquality
airquality3$Solar.R <- as.numeric(airquality3$Solar.R)
airquality3$Solar.R <- airquality3$Solar.R*2.5
test <- round(na.omit(rbind(airquality, airquality2, airquality3)))
test$var1 <- factor(test$var1)
test$var2 <- factor(test$var2)
head(test)

来到:

head(test)

#   Ozone Solar.R Wind Temp Month Day var1 var2
# 1    41     190    7   67     5   1    1    1
# 2    36     118    8   72     5   2    2    2
# 3    12     149   13   74     5   3    2    1
# 4    18     313   12   62     5   4    3    2
# 7    23     299    9   65     5   7    3    1
# 8    19      99   14   59     5   8    2    1

现在我想用两个最高和最低值删除行Solar.R与类似group_by(Month, var1, var2).由于有30个因子组合(5*3*2),因此应省略90行.其余数据应该保持不变.我看着Min&Max,但无法让它工作.任何帮助都将很高兴.



1> Gregor..:

我想你正在寻找slice:

library("dplyr")

sliced = 
    test %>%
    group_by(Month, var1, var2) %>% # group
    arrange(Solar.R) %>%            # within-group, order by Solar.R
    slice(3:(n() - 2))              # keep the 3rd through the 3rd-to-last row

nrow(sliced)
# [1] 233

编辑:我刚3:(n() - 3)开始,纠正了3:(n() - 2).一个很好的完整性检查是想(1:10)[3:(10 - 3)]VS (1:10)[3:(10 - 2)].我没有费心去阅读您的模拟代码,但是当我查看了一些内容时,n_group()我看到了27个组,而不是30个问题.(也许是一个种子问题,原始人set.seed(1)有28个小组.)

更多编辑:根据您的编辑,看起来您可能想要省略最低值和两个最高值,而不是两个最低值和两个最高值.只需更改3:(n() - 2))2:(n() - 2)进行调整即可.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有