计算连续值之间的差异或R中向量中的最新非NA值

dam*_*ach 5 r vector difference

我正在寻找一个R函数来计算向量之间的差异或向量中的最新非NA值.这是一个例子:

visit <- c(1,2,3,4)
time <- c(5,10,NA,15)
df <- data.frame(visit ,time)
Run Code Online (Sandbox Code Playgroud)

我们正在寻找自上次访问以来的时间.

使用diff,我们得到一个长度为3的向量:

diff <- diff(df$time, lag = 1, differences = 1)

5 NA NA
Run Code Online (Sandbox Code Playgroud)

想要的'diff'向量是:

 5 NA 5
Run Code Online (Sandbox Code Playgroud)

理想情况下,它与原始矢量'value'的长度相同,因此可以将其添加到数据帧'df':

  visit | time | diff
    1      5       NA
    2      10      5
    3      NA      NA
    4      15      5
Run Code Online (Sandbox Code Playgroud)

Spa*_*man 3

这是一种仅使用基本 R 操作的方法:

首先通过去掉 NA 来计算非 NA 差异:

> cdiffs = diff(df$time[!is.na(df$time)])
Run Code Online (Sandbox Code Playgroud)

然后计算出它们将在结果栏中的位置。这将是所有非 NA 位置,除了第一个位置(由于滞后而为 NA):

> cplace = which(!is.na(df$time))[-1]
Run Code Online (Sandbox Code Playgroud)

现在创建一列 NA 并将差异填充到正确的位置:

> df$diffs = NA
> df$diffs[cplace] = cdiffs
> df
  visit time diffs
1     1    5    NA
2     2   10     5
3     3   NA    NA
4     4   15     5
Run Code Online (Sandbox Code Playgroud)