在R
中,我试图基于其他2列创建局部最小值/最大值的列。
特别是,我希望第3列成为“当前”列,并且当x1 > current
或x2 < 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
答案 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