【发布时间】:2019-10-02 20:08:20
【问题描述】:
我需要连续计算非 NA 值之间的差异。例如,如果只有a、c和e点有值,而b和d中的值为NA,我需要计算c和a、e和c之间的差值,并留下b和a之间的差值和d 和 c 空白。 d1 是 b 中的非 NA 值与左侧最近的非 NA 值之间的差(必须是 a 中的非 NA 值)。 d2 是 c 中的非 NA 值与左侧最近的非 NA 值之间的差。 d3 是 d 中的非 NA 值与左侧最近的非 NA 值之间的差。 d4 是 e 中的非 NA 值与左侧最近的非 NA 值之间的差。
我认为我缺少一些可在这种情况下使用的 R 函数。我尝试编写一些 ifelse 条件来说明前面的数据点为 NA,结果证明这是一个很长的 ifelse 语句。
df$d1<-ifelse(!is.na(df$a and !is.na(df$b), df$b-df$a)
但是我离 a 越远,ifelse 语句就越复杂。
我也试过写
df$d1<-(!is.na(df$b))-(!is.na(df$a))
结果不是差异,而是第一个数据点是否为 NA (我在 d1 列中得到 0、1、-1)。
这是我原始数据库的结构:
```a<-c(10, 20, NA, 40, 50, 60)
b<-c(5, NA, 6, 7, NA, 8)
c<-c(NA, 4, 5, NA, 7, 8)
d<-c(NA, 9, 8, 7, 6, 5)
e<-c(3, 4, NA, 5, 6, 7)
df<-data.frame(a, b, c, d, e)```
这就是我需要的结果:
```d1<-c('-5','' ,'' , '-33','', '-52')
d2<-c('', '-16', '-1', '', '-43', '0')
d3<-c('', '5', '3', '0', '-1', '-3')
d4<-c('-2', '-5', '', '-2', '0', '2')
df1<-data.frame(d1, d2, d3, d4)```
【问题讨论】:
标签: r missing-data