确保滞后值(在本例中为连续值)为非负值。

问题描述 投票:0回答:1

理想情况下,在下面的数据示例中,累积值(cumvals)应该是非递减的(或者等价--连续的差值(diffs)必须是非负的)。但是由于某些原因,当累计值不是非递减的时候,我在试图解决这个问题时遇到了麻烦。

library(dplyr)

cumvals <- c(0,0,1,0,1,1,2,5,7,7,7,6,8, 8)
ID <- rep(1001, length(cumvals))
df <- data.frame(ID, cumvals)
df%>%
   mutate(diffs= c(0, diff(cumvals)))   # create lagged differences- first entry is 0!

理想的输出应该是这样的,修正后的累积值(corrcumvals)是非递减的,滞后差值是非负值。

corrcumvals <- c(0, 0, 0, 0, 1, 1, 2, 5, 6, 6, 6, 6, 8, 8)
df2 <- data.frame(ID, cumvals, corrcumvals)
df2%>%
  mutate(diffs= c(0, diff(cumvals)))%>%
  mutate(corrdiffs= c(0, diff(corrcumvals)))

我想过用一个 ifelse() 来检查当前的 cumvals 值是否小于前一个值,如果是,则将 cumvals 的前一个值赋值给当前。但是,当多个条目的前一个条目相同时,问题就会出现。在这种情况下,我需要将所有之前的条目设置为当前值。例如,当cumvals连续有三个7,然后是6,那么我就需要将所有的7改为6,以确保vectorcolumn的值是不递减的。

r data-manipulation
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.