gpt4 book ai didi

r - na.locf with seq in large column in R

转载 作者:行者123 更新时间:2023-12-02 06:50:23 24 4
gpt4 key购买 nike

我目前正在处理一个大型 data.table,该表具有基于 2 个引用列的某些组,然后有一个距离列,该列为每个组中的第一行定义,然后每次跳转 2 个单位。

做一个非常小的可重现的例子,我有:

reference1 <- c("ref1", "ref1", "ref1", "ref2", "ref2", "ref2", "ref2", "ref3", "ref3", "ref3")
reference2 <- c("fer1", "fer1", "fer1", "fer1", "fer1", "fer1", "fer1", "fer2", "fer2", "fer2")
firstdist <- c(2, NA, NA, 5, NA, NA, NA, 8, NA, NA)
df <- data.frame(ref1 = reference1,
ref2 = reference2,
dist = firstdist)

相当于

   ref1 ref2 dist
1 ref1 fer1 2
2 ref1 fer1 NA
3 ref1 fer1 NA
4 ref2 fer1 5
5 ref2 fer1 NA
6 ref2 fer1 NA
7 ref2 fer1 NA
8 ref3 fer2 8
9 ref3 fer2 NA
10 ref3 fer2 NA

我想填写最后一次观察的列并将其向前推进 +2,因此我假设我想为此使用 zoo 包中的 na.locf。四处搜索,我还没有找到任何方法可以在添加常量整数的同时继续进行。

我想要的输出示例:

   ref1 ref2 dist
1 ref1 fer1 2
2 ref1 fer1 4
3 ref1 fer1 6
4 ref2 fer1 5
5 ref2 fer1 7
6 ref2 fer1 9
7 ref2 fer1 11
8 ref3 fer2 8
9 ref3 fer2 10
10 ref3 fer2 12

例如用类似的东西

df$dist <- na.locf(df$dist, by = 2)

不能 100% 确定 na.locf 是最好的方法,因此也欢迎使用 data.table 解决方案,但由于我的表有数百万行,效率也相当重要

谢谢,

最佳答案

我会尝试以下方法:

library(data.table)
setDT(df)

df[, dist := seq(first(dist), by = 2, length.out = .N), by = .(ref1, ref2)]

# > df
# ref1 ref2 dist
# 1: ref1 fer1 2
# 2: ref1 fer1 4
# 3: ref1 fer1 6
# 4: ref2 fer1 5
# 5: ref2 fer1 7
# 6: ref2 fer1 9
# 7: ref2 fer1 11
# 8: ref3 fer2 8
# 9: ref3 fer2 10
# 10: ref3 fer2 12

此处,.N 是每组中的行数(按 ref1ref2 分组)。

关于r - na.locf with seq in large column in R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46174747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com