2015-10-03 59 views
1

我有一個數據幀結構是這樣缺少值

time <- c(1,1,1,1,2,2) 
group <- c('a','b','c','d','c','d') 
number <- c(2,3,4,1,2,12) 

df <- data.frame(time,group,number) 

    time group number 
1 1  a  2 
2 1  b  3 
3 1  c  4 
4 1  d  1 
5 2  c  2 
6 2  d  12 

爲了繪製我需要它在每個時間間隔包含值爲每個組(AD)中的數據創建新的數據幀,即使他們等於零。這樣一個數據幀尋找這樣的:

time group number 
1 1  a  2 
2 1  b  3 
3 1  c  4 
4 1  d  1 
5 2  a  0 
6 2  b  0 
7 2  c  2 
8 2  d  12 

任何幫助嗎?

回答

5

您可以使用expand.gridmerge,像這樣:

> merge(df, expand.grid(lapply(df[c(1, 2)], unique)), all = TRUE) 
    time group number 
1 1  a  2 
2 1  b  3 
3 1  c  4 
4 1  d  1 
5 2  a  NA 
6 2  b  NA 
7 2  c  2 
8 2  d  12 

從那裏,它與0

+0

尼斯一個替代NA的只是一個簡單的事....... –

+0

我到了那裏,但又需要10-20分鐘,而且會是多線。 –

+0

最後一步的例子是:'rdf [is.na(rdf $ number),] $ number = 0'如果'rdf'有'merge'命令的結果。 –

0
new <- merge(df, expand.grid(lapply(df[c(1, 2)], unique)), all.y = TRUE) 
new[is.na(new$number),"number"] <- 0 
new