【问题标题】:Subset data between specific points in RR中特定点之间的子集数据
【发布时间】:2017-11-10 18:42:06
【问题描述】:

我正在尝试在特定点之间对 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)

这将返回完全相同的数据集。这是有道理的,因为所有值都高于最小值或低于最大值。但是有没有办法专门从最小值到最大值获取数据并排除最小值之前和最大值之后的数据?谢谢

【问题讨论】:

  • if(which.min(z) &lt; which.max(z)) z[which.min(z) : which.max(z)] else z[which.max(z) : which.min(z)] 或者如果顺序无关紧要 z[which.min(z) : which.max(z)] 假设 z 是感兴趣的列(向量)
  • 你能提供一个预期输出的例子吗?
  • 刚刚做了。感谢您的帮助

标签: r subset


【解决方案1】:

ycw 的解决方案显然更优雅,但我会给你我的

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]} 

【讨论】:

  • 谢谢。不幸的是,有人不喜欢我的回答并投了反对票。没关系,我会在这里保留我的答案,看看这是否对 OP 有帮助。很高兴与您交谈,希望您一切顺利。
猜你喜欢
  • 2018-08-01
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
  • 2020-08-10
  • 2014-12-10
  • 1970-01-01
  • 2019-11-20
相关资源
最近更新 更多