基于列的R滚动功能

时间:2019-02-22 10:16:56

标签: r

R中,我试图基于其他2列创建局部最小值/最大值的列。

特别是,我希望第3列成为“当前”列,并且当x1 > currentx2 < current时,我想更新currentValue。否则,它应该是前一个currentValue

最初,我将整个y1列设置为起始值。 可以看出,第5行应使用5的currentValue,并且不应进行任何更改。但是,将比较值改为2。

任何帮助将不胜感激,因为我不熟悉在R中应用自定义滚动功能。似乎应该对此有一个优雅的解决方案,但其他一些类似的文章也需要大量代码才能实现。

> c1 <- c(1,1,2,5,4,3,2,1)
> c2 <- c(2,3,3,6,6,4,4,2)
> c3 <- 2
> tempData <- data.frame(c1,c2,c3)
> names(tempData) <- c("x1", "x2", "currentValue")
> tempData
  x1 x2 currentValue
1  1  2            2
2  1  3            2
3  2  3            2
4  5  6            2
5  4  6            2
6  3  4            2
7  2  4            2
8  1  2            2
> 
> tempData$currentValue <- ifelse (tempData$x1 > lag(tempData$currentValue), tempData$x1, ifelse(tempData$x2 < lag(tempData$currentValue), tempData$x2, lag(tempData$currentValue)))
> tempData
  x1 x2 currentValue
1  1  2           NA
2  1  3            2
3  2  3            2
4  5  6            5
5  4  6            4
6  3  4            3
7  2  4            2
8  1  2            2

1 个答案:

答案 0 :(得分:0)

我认为这段代码可以为您提供帮助。 在ifelse语句中应用该lag函数是有问题的,因为在您的代码中,无论如何我都不会移动列的值,反正请检查以下代码。

    c1 <- c(1,1,2,5,4,3,2,1)
c2 <- c(2,3,3,6,6,4,4,2)
c3 <- 2
tempData <- data.frame(c1,c2,c3)
names(tempData) <- c("x1", "x2", "currentValue")
tempData
tempData$x1.lag <- c(NA, tempData$x1[1:7] )
tempData$x2.lag <- c(NA, tempData$x2[1:7] )
tempData
tempData$currentValue <- ifelse (tempData$x1 > tempData$x1.lag , tempData$x1,
                                 ifelse( tempData$x2 < tempData$x2.lag, tempData$x2, tempData$currentValue))
tempData$x1.lag <- NULL
tempData$x2.lag <- NULL
tempData