2015-12-08 24 views
1

假设我有数据帧如下所有列值,替换除一个与平均值作为R中的所有行

> test <- data.frame(a=6:15, b=14:23, c= rep(1:5,2)) 
> test 
    a b c 
1 6 14 1 
2 7 15 2 
3 8 16 3 
4 9 17 4 
5 10 18 5 
6 11 19 1 
7 12 20 2 
8 13 21 3 
9 14 22 4 
10 15 23 5 

我想使数据帧如下,

 a b c 
1 10.5 18.5 1 
2 10.5 18.5 2 
3 10.5 18.5 3 
4 10.5 18.5 4 
5 10.5 18.5 5 

其中值是,

> mean(test$a) 
[1] 10.5 
> mean(test$b) 
[1] 18.5 
> unique(test$c) 
[1] 1 2 3 4 5 

任何人都可以帮助我根据需要转换数据帧吗?我的尝试是,

data.frame(a=rep(mean(test$a),5), b=rep(mean(test$b),5), c=unique(test$c)) 

但是,当我有更多的变量数,就很难用这种方式,它是没有效率也。有没有更容易和更好的方法来做到这一点?

+0

你想在你需要的输出5行?或者仅仅是一个例子,并且希望拥有与原始数据相同的行数? –

+0

@所需输出中只有5行 – haimen

回答

5

你可以试试:

data.frame(c(list(c=unique(test$c)),lapply(test[-3],mean))) 
# c a b 
#1 1 10.5 18.5 
#2 2 10.5 18.5 
#3 3 10.5 18.5 
#4 4 10.5 18.5 
#5 5 10.5 18.5