Функция качения R на основе столбцов - PullRequest
0 голосов
/ 22 февраля 2019

В R я пытаюсь создать столбец локального минимума / максимума на основе 2 других столбцов.

В частности, я хочу, чтобы 3-й столбец был «текущим» столбцом,и когда x1 > current или x2 < current я хочу обновить currentValue.В противном случае это должен быть предыдущий currentValue

. Первоначально я установил для всего столбца y1 начальное значение.Как видно, строка 5 должна использовать currentValue из 5, и никаких изменений не должно быть.Однако вместо этого проводится сравнение со значением 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 голосов
/ 22 февраля 2019

Я думаю, что этот код может помочь вам.Трудно применить эту функцию запаздывания в операторе ifelse, в вашем коде не происходит смещение значений столбца. Я думаю, в любом случае, проверьте следующий код.

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...