【问题标题】:Minimum between consecutive values连续值之间的最小值
【发布时间】:2018-07-22 13:42:58
【问题描述】:

我正在寻找类似于diff 的函数,但不是计算两个连续值之间的差异,而是计算它们之间的最小值。也就是说,如果你有 x <- c(7,3,17,9) 我想要的是 c(3,3,9) 作为输出。 是否有实现此功能的功能(不仅适用于最小功能,还适用于最大功能或其他功能?

解释

第一个值 (3) 是前两个元素 min(c(7,3)) 之间的最小值

第二个值 (3) 是第二个和第三个元素之间的最小值 min(c(3,17))

第三个值 (9) 是第三个和第四个元素之间的最小值min(c(17,9))

【问题讨论】:

  • 我不明白你是怎么得到c(1, 1, 9)的。也许再解释一下。
  • 您可以从 zoo 包中查看rollmaxrollmean。但这些通常用于时间序列数据。此外,您可以查看 fMultivar 包。
  • 谢谢@TUSH,解决方案是rollapply(c(7,3,17,9),2,min)rollapply()function 正是我想要的。

标签: r minimum


【解决方案1】:

使用pmin() 计算两个或多个向量的每个元素之间的最小值。使用head()tail() 创建一对大小合适的偏移向量。

> x = c(7,3,17,9)
> pmin(head(x, -1), tail(x, -1))
[1] 3 3 9

相对于rollapply() 的两个优点是它不需要额外的包,并且当向量的长度为 0 时,相同的语法可以工作,因此在您可能希望重用的脚本或函数中更加健壮。

> x = numeric(); pmin(head(x, -1), tail(x, -1))
numeric(0)
> x = numeric(); rollapply(x, 2, min)
Error in max(sapply(dat, length)) : invalid 'type' (list) of argument

【讨论】:

  • 非常感谢您提供此替代方案并解释为什么使用它更好。
  • zoo 的开发版本处理了这种边缘情况并且更具可读性。安装:install.packages("zoo", repos="http://R-Forge.R-project.org")
猜你喜欢
  • 2021-06-08
  • 2021-09-20
  • 2020-03-30
  • 2021-09-25
  • 2020-11-20
  • 1970-01-01
  • 2016-11-04
  • 2015-03-28
  • 1970-01-01
相关资源
最近更新 更多