我测量了一些位置pos
,例如:
library(dplyr)
set.seed(8)
data <-
data.frame(id=LETTERS[1:5],
pos=c(0,round(runif(4, 1, 10),0))) %>%
arrange(pos)
> data
id pos
1 A 0
2 C 3
3 B 5
4 E 7
5 D 8
如何扩展像data
这样的数据框,每个可能的pos
(0,1,2,..,n),其中n将是max(数据$ pos)(即8 in这个例子)。我喜欢得到的东西:
id pos
1 A 0
2 NA 1
3 NA 2
4 C 3
5 NA 4
6 B 5
7 NA 6
8 E 7
9 D 8
答案 0 :(得分:2)
你可以通过多种方式实现这一目标,但在基础R中,一种方法是使用合并:
merge(data.frame(pos = 0:8), data, all.x = TRUE)
或者,使用dplyr
,它是:
data.frame(pos = 0:8) %>% left_join(data)
答案 1 :(得分:2)
我们可以尝试
library(data.table)
setDT(data)[data.table(pos=0:8), on='pos']
# id pos
#1: A 0
#2: NA 1
#3: NA 2
#4: C 3
#5: NA 4
#6: B 5
#7: NA 6
#8: E 7
#9: D 8