他们的立场之间差异均匀分布

时间:2017-07-10 03:35:03

标签: r data.table

我有class AppDelegate: NSObject, NSApplicationDelegate { override init() { super.init() let info = Bundle.main.infoDictionary! let version = info["RealmSchemaVersion"] as! UInt64 Realm.Configuration.defaultConfiguration.schemaVersion = version } ... } data.table

test

我希望得到

test=data.table(x=c(1,2,NA,NA,5))
test
    x
1:  1
2:  2
3: NA
4: NA
5:  5

如5-2 = 3并均匀分配到3行

test x y 1: 1 1 2: 2 1 3: NA 1 4: NA 1 5: 5 NA 功能仅适用于

diff()

1 个答案:

答案 0 :(得分:1)

这是一个矢量化但有些过于复杂的解决方案(IMO)似乎适用于我测试的所有情况

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