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