2014-03-31 71 views
0

我有一個大的數據集,這樣的缺失值:填寫基於主題ID

SUB DAY BASE 
1 0 .  
1 0 . 
1 0 . 
1 0 .  
1 1 3.5 
1 1 3.5 
1 2 3.5 
1 2 3.5  
2 0 . 
2 0 . 
2 0 . 
2 1 2.3 
2 1 2.3 
2 2 2.3 
2 2 2.3 
... 

我想從SUB值填充Base中的缺失值。預期的輸出應該是這樣的:

SUB DAY BASE 
1 0 3.5  
1 0 3.5 
1 0 3.5 
1 0 3.5  
1 1 3.5 
1 1 3.5 
1 2 3.5 
1 2 3.5  
2 0 2.3 
2 0 2.3 
2 0 2.3 
2 1 2.3 
2 1 2.3 
2 2 2.3 
2 2 2.3 
... 

有沒有人有關於實現這一點的想法?

+1

你可以提供一個可重複的例子嗎? http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

+0

給定的「SUB」值的BASE值是否始終是唯一的? –

+0

嗨Carl,是的,給定SUB值的BASE值始終是唯一的 – dzadi

回答

2

使用merge如果你遺漏值等於NA(棘手,可能是一個更好的方法):

dat <- read.table(header = T, text = "SUB DAY BASE 
1 0 NA 
1 0 NA 
1 0 NA 
1 0 NA 
1 1 3.5 
1 1 3.5 
1 2 3.5 
1 2 3.5  
2 0 NA 
2 0 NA 
2 0 NA 
2 1 2.3 
2 1 2.3 
2 2 2.3 
2 2 2.3") 

> merge(subset(dat, select= -BASE), unique(dat[!is.na(dat$BASE),c("SUB", "BASE")]), by = "SUB") 
    SUB DAY BASE 
1 1 0 3.5 
2 1 0 3.5 
3 1 0 3.5 
4 1 0 3.5 
5 1 1 3.5 
6 1 1 3.5 
7 1 2 3.5 
8 1 2 3.5 
9 2 0 2.3 
10 2 0 2.3 
11 2 0 2.3 
12 2 1 2.3 
13 2 1 2.3 
14 2 2 2.3 
15 2 2 2.3 
+1

這也可以通過使用'dat $ BASE!='。'來使用。 – SethB