2017-09-25 72 views
0

我想获得特定列的三个部分的手段。如下图所示,我已经分离了数据成排的三个部分,发现手段对于相同数据R的不同方法

> x<-mydata[1:50,3] 
> mean(x) 
[1] 1.462 
> za<-mydata[51:100,3] 
> mean(za) 
[1] 4.26 
> ch<-mydata[101:150,3] 
> mean(ch) 
[1] 5.552 

我试图把这个变成一个说法,但手段显得比那些单独陈述的不同。

mydata[c(mean(1:50), mean(51:100), mean(101:150)), 3] 
[1] 1.9 4.3 5.7 

第二平均似乎四舍五入到十位相比原来的意思,但同样不能为其他两种方式来表示。连接函数中是否会发生改变方法的事情?

+0

您可以将基础数据? – BLT

+0

你是方法是无效的语法。考虑'(1:50)[平均(1:50)]'平均值是25.5。该调用返回25.因此在'['中该值被截断,返回矢量'1:50'中的25值。也许用''[平均(1:50)]''返回“y”更清晰。在'?“[”'中的帮助文件中,它表示*数字值被as.integer强制转换为整数(因此截断为零)* – lmo

回答

0

试试这个:

c(mean(mydata[1:50,3]), mean(mydata[51:100,3], mean(mydata[101:150,3]) 
+0

谢谢!你知道我为什么给出类似但不同的答案吗? – Lost

+0

你在做索引的意思,而不是通过索引获取数字,然后做出平均值。通话顺序改变结果 – csgroen

0

mean(1:50)会给你的整数序列的均值从1开始,并在50

mydata[c(mean(1:50), mean(51:100), mean(101:150)), 3] 

结束会给你行索引mean(1:50)mydata值,mean(51:100)mean(101:50)和列索引3.

c(mean(mydata[1:50, 3]), mean(mydata[51:100, 3]), mean(mydata[101:150, 3])) 

应该会给你预期的结果。

几个不同的解决方案,同样的问题:

sapply(split(mydata[, 3], ceiling(seq_along(mydata)/50)), mean) 

sapply(split(mydata[, 3], rep(1:3, each=50)), mean) 
相关问题