查找R中每一行的前一行到后一行的最大值

查找R中每一行的前一行到后一行的最大值,r,R,我一直在到处寻找答案。这看起来很简单,但我正在努力使任何东西都能正常工作 在Win7中使用R3.0 我正在寻找一种方法来找到最大值(逐行):感兴趣的行、前一行和后一行 示例如下所示: x max 1 1 NA 2 7 7 3 3 7 4 4 5 5 5 5 我可以通过循环来实现这一点,但如果可能的话,我希望避免这种情况。我已经探索过类似于行和和rollmean的东西,但它们不太适合账单,因为我希望后面的行也有一个最大值 非常感谢您的任何想法 假设您

我一直在到处寻找答案。这看起来很简单,但我正在努力使任何东西都能正常工作

在Win7中使用R3.0

我正在寻找一种方法来找到最大值(逐行):感兴趣的行、前一行和后一行

示例如下所示:

   x  max
1  1   NA
2  7    7
3  3    7
4  4    5
5  5    5
我可以通过循环来实现这一点,但如果可能的话,我希望避免这种情况。我已经探索过类似于
行和
rollmean
的东西,但它们不太适合账单,因为我希望后面的行也有一个最大值


非常感谢您的任何想法

假设您希望对矩阵而不是向量执行此操作(使用rollapply for vectors),这是一个简单的解决方案,在速度方面可能不是最好的:

library(Hmisc)
x <- matrix(runif(10), ncol=2)
rowMaxs  <- apply(x, 1, max)

row3Maxs <- apply(cbind(rowMaxs, 
                        Lag(rowMaxs, 1), 
                        Lag(rowMaxs, -1)), 1, max)

cbind(x, row3Maxs)
库(Hmisc)

x您可以使用
embed
pmax
在基本R中进行此操作

d <- data.frame(x=c(1,7,3,4,5))
transform(d, max=c(NA, do.call(pmax, as.data.frame(embed(d$x, 3))), NA))
#   x max
# 1 1  NA
# 2 7   7
# 3 3   7
# 4 4   5
# 5 5  NA

d以下是一种使用dplyr的
lead()
lag()
函数的方法:

library(dplyr)

d <- data.frame(x = c(1,7,3,4,5))
mutate(d, max = pmax(lead(x), x, lag(x)))
#>   x max
#> 1 1  NA
#> 2 7   7
#> 3 3   7
#> 4 4   5
#> 5 5  NA
库(dplyr)
d x最大值
#>11NA
#> 2 7   7
#> 3 3   7
#> 4 4   5
#>5 NA

如果最后一行的答案是5,为什么第一行的答案现在不是7?或者,如果第一行的答案是NA,那么为什么最后一行的答案也不是NA?最后的“5”不也应该是
NA
?也许,你可以将你的
x
包装在
NA
s之间,然后选中
zoo::rollappy(x,3,max)
RcppRoll:roll_max(x,3)
你们都是对的。。。。我的例子也应该是第5排的NA谢谢Matt。。。。。我对alexis上面提到的
rollapply
roll\u max
感兴趣,但我认为
pmax
是我想要的。非常感谢。
library(dplyr)

d <- data.frame(x = c(1,7,3,4,5))
mutate(d, max = pmax(lead(x), x, lag(x)))
#>   x max
#> 1 1  NA
#> 2 7   7
#> 3 3   7
#> 4 4   5
#> 5 5  NA