【发布时间】:2020-04-26 21:05:30
【问题描述】:
数据
我们来看一个简单的数据集(我的实际是>200,000行):
df <- data.frame(
id = c(rep(1, 11), rep(2,6)),
ref.pos = c(NA,NA,NA,301,302,303,800,801,NA,NA,NA, 500,501,502, NA, NA, NA),
pos = c(1:11, 30:35)
)
看起来像这样:
id ref.pos pos
1 1 NA 1
2 1 NA 2
3 1 NA 3
4 1 301 4
5 1 302 5
6 1 303 6
7 1 800 7
8 1 801 8
9 1 NA 9
10 1 NA 10
11 1 NA 11
12 2 500 30
13 2 501 31
14 2 502 32
15 2 NA 33
16 2 NA 34
17 2 NA 35
我想要实现的目标
根据id,我想扩展ref.pos 中的数字以填充整列,其中ref.pos 数字在数据框中向上移动,在列中向下移动。这将产生以下数据框:
id ref.pos pos
1 1 298 1
2 1 299 2
3 1 300 3
4 1 301 4
5 1 302 5
6 1 303 6
7 1 800 7
8 1 801 8
9 1 802 9
10 1 803 10
11 1 804 11
12 2 500 30
13 2 501 31
14 2 502 32
15 2 503 33
16 2 504 34
17 2 505 35
我尝试了什么
我希望我可以在这里提供一些代码,但是我在两天内还没有找到合适的方法,尤其是不适用于大型数据集的方法。我发现 df %>% group_by(id) %>% tidyr::fill(ref.pos, .direction = "downup") 很有趣,但是这对我来说是重复数字而不是上下波动。
希望我的问题很清楚,否则请在 cmets 中告诉我!
【问题讨论】: