【问题标题】:reject numbers in a sequence of numbers that do not increase with same increase拒绝不随相同增加而增加的数字序列中的数字
【发布时间】:2017-10-05 19:26:29
【问题描述】:

我有一个数字序列,我想检查并拒绝不以相似级别增加的数字。

data <- c(1, 2, 5, 6, 6.25, 6.49, 6.75, 7.01, 8, 9, 11)

例如,对于这里的数据,我想对增加 0.25+/-0.1 的数字进行子集化,并拒绝不遵循此规则的数字。在这种情况下,子集序列将是 (6, 6.25, 6.49, 6.75, 7.01)。

【问题讨论】:

  • 欢迎来到 SO。该站点不是代码编写服务,也不旨在提供完整的解决方案。当 SO 在这里帮助您解决特定的编程问题时,用户应该表现出一些努力和代码。你已经尝试过什么了吗?请阅读:stackoverflow.com/help/asking

标签: r increment number-sequence


【解决方案1】:

这是获取您想要保留的索引的一种丑陋方式。如果您对不同的截止值感兴趣,请更改 0.35

myfun <- function(D) {
            index <- unique(c(which(abs(diff(D)) < 0.35), which(abs(diff(D)) < 0.35)+1))
            return(sort(index))
        }

调用函数获取你想要的答案

data[myfun(data)]
# [1] 6.00 6.25 6.49 6.75 7.01

另一个测试

test <- c(1, 1.25, 2, 2.25, 3, 4.5, 4.75, 5, 5.45, 5.65)
test[myfun(test)]
# [1] 1.00 1.25 2.00 2.25 4.50 4.75 5.00 5.45

【讨论】:

  • 您可以通过将which(dplyr::lag(abs(diff(D)) &lt; 0.35, 1)) 替换为which(abs(diff(D)) &lt; 0.35) + 1 来删除dplyr 依赖项。 lag 本质上只是将 TRUE 索引加一。
  • 我确实提到它很丑
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 2013-08-15
  • 2021-05-31
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多