这似乎是一个非常基本的问题,但我似乎无法找到解决方案.
你怎么去掉两个最高及的(三级)行的的最低值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
,但无法让它工作.任何帮助都将很高兴.
我想你正在寻找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)
进行调整即可.