2014-03-31 51 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