我试图在特定点之间对R中的一些数据进行子集化。具体来说,我希望只返回最小值之后和最大值之前的数据。我的数据集类似于以下内容。所以,我试图在第8点之后和数据点20之前对点数据进行子集。
x1
1. 4
2. 4
3. 5
4. 5
5. 5
6. 4
7. 3
8. 0
9. 1
10. 2
11. 2
12. 3
13. 3
14. 4
15. 5
16. 6
17. 6
18. 7
19. 8
20. 6
21. 4
22. 2
所以预期的输出是
8. 0
9. 1
10. 2
11. 2
12. 3
13. 3
14. 4
15. 5
16. 6
17. 6
18. 7
19. 8
我试过了
min <- min(x1)
max <- max(x1)
newdata <- subset(x1,x1<max|x1>min)
返回完全相同的数据集。这是有道理的,因为所有值都高于最小值或低于最大值。但有没有办法将数据从最小值到最大值具体化,并在最小值之前和最大值之后排除数据?感谢
答案 0 :(得分:1)
cdata<-as.data.frame(c(4,4,5,5,5,5,4,3,0,1,2,2,3,3,4,5,6,6,7,8,6,4,2))
min <- min(cdata)
max <- max(cdata)
rowmax<- max(which(cdata == max))
rowmin<- min(which(cdata == min))
if (rowmax>rowmin){
cdata<-cdata[rowmin:rowmax,, drop=FALSE]
} else{cdata<-cdata[rowmax:rowmin,, drop=FALSE]}