2015-11-27 2 views
0

Я измерил некоторые позиции pos, например:R: строчное расширение кадра данных с последовательными целыми числами

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 (data $ pos) (т. е. 8 в этом примере). Я хотел бы получить что-то как:

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 

ответ

2

Вы можете сделать это несколькими способами, но один из способов, в базовой R, является использование слияния:

merge(data.frame(pos = 0:8), data, all.x = TRUE) 

Или, используя dplyr, это:

data.frame(pos = 0:8) %>% left_join(data) 
+0

Для базового R Soluti хотя акрун так же прост. – user3375672

+0

возможно, хотя я не думаю, что data.table также является базой R. – jimmyb

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 
Смежные вопросы