首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在他们的职位之间平均分布的差异

在他们的职位之间平均分布的差异
EN

Stack Overflow用户
提问于 2017-07-10 03:35:03
回答 1查看 53关注 0票数 2

我有data.table test

代码语言:javascript
复制
test=data.table(x=c(1,2,NA,NA,5))
test
    x
1:  1
2:  2
3: NA
4: NA
5:  5

我想让

代码语言:javascript
复制
test
    x y
1:  1 1
2:  2 1
3: NA 1
4: NA 1
5:  5 NA

类似于5-2=3,并平均分布在3行。

diff()函数只适用于

代码语言:javascript
复制
data.table(x,y=c(diff(x),NA))
    x  y
1:  1  1
2:  2 NA
3: NA NA
4: NA NA
5:  5 NA
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-10 06:07:03

这里有一个矢量化但有点过于复杂的解决方案(IMO),它似乎适用于我测试过的所有案例

代码语言:javascript
复制
test[, y := {
  indx <- !is.na(x)
  indx2 <- .I[indx]
  c(rep(NA, min(indx2) - 1), 
    rep(diff(x[indx]) / diff(indx2), diff(indx2)), 
    rep(NA, .N - max(indx2) + 1))
}]

test
#     x  y
# 1:  1  1
# 2:  2  1
# 3: NA  1
# 4: NA  1
# 5:  5 NA

这基本上是将非NA值的差异除以其位置的差异,然后复制它们。它还从右和左添加NA,以防开头或结尾的值是NA

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45003433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档