【问题标题】:Vector: How to filter out segments of decreasing values向量:如何过滤掉递减值的段
【发布时间】:2015-03-14 06:05:27
【问题描述】:

假设有一个向量 sim 包含以下数字序列:

1
2
4
7
5
3
2.5
4
6

如何过滤掉所有递减值的段以实现sim 只增加值?预期结果:

1
2
4
7
2.5
4
6

【问题讨论】:

  • 在您的结果中,7 到 2.5 看起来不像是一个递增的值。你只想要1 2 4 7吗?或者您是否要对其进行过滤以获取所有长度为 2 或更大的递增值?
  • 根据你的要求,最后应该simc(1,2,4,7,4,6),还是我误解了你的帖子?
  • 如果2.5 是错字,那么sim[c(TRUE,diff(sim)>0)]。如果条件是>-1sim[c(TRUE,diff(sim)>-1)]
  • @Andrew Taylor:我想剪掉值递减的段,在这种情况下:5 和 3。问题是我想保持 7 和 2.5 作为递增段的结束和开始,分别。
  • @David Robinson:是的,正确的,我想获得所有长度为 2 或更大的递增值。

标签: r vector filter filtering


【解决方案1】:

根据@akrun 的建议:

dif <- diff(sim) > 0
sim[ c(dif[1], dif) | c(dif, dif[length(dif)]) ]
[1] 1.0 2.0 4.0 7.0 2.5 4.0 6.0

【讨论】:

  • 如果增加值的延伸次数大于2,它会起作用吗?
  • 如果我能正确理解您的问题,那么是的。拉伸次数不限,只需尝试添加或删除sim元素即可。
猜你喜欢
  • 1970-01-01
  • 2020-06-21
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多