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)
这是一种仅使用基本 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)