• R语言
  • R语言,数据分组 和关于if for问题

刚接触R,做练习的时候看到这道题,不大会,希望各大神帮助一下,谢谢啦〜

有一个dataset 3,4,5,6,7,2,3,4,5,6,6,1

写一个function计算这个数据组每五个数一组的average和range,如果最后一组少于5个数的话写一个note

就是 the average and range of(3,4,5,6,7)

the average and range of(2,3,4,5,6)

the average and range of(6,1)

and a message that in the last group only 2 values

我知道应该用条件循环那里吧,但是还是不会写〜 谢谢大家〜

MyFun=function(num,fun=c(mean,range))<br />
{<br />
  if(length(num)%%5!=0)<br />
    warning('The last group has less than 5 elements!')<br />
  tapply(num,as.integer(seq(1,by=0.2,along.with=num)),fun)<br />
}<br />
lapply(c(mean,range),MyFun,num=1:13)<br />


好吧用function类变量做形参的写法对新人来说大概太过丧心病狂了点。但是计算思路个人觉得还是可以模仿一下的:先建立一个步进1/5=0.2的数列,然后强制转换成整数型,就可以快速得到一个每5个元素一组的factor,然后再tapply就行。
</p>

回复 第3楼 的 月珥:谢谢大神回复 确实有点丧心病狂 以为是初级 但还是觉得很难。还有别的写法吗?这个有我没学到的,有点理解不了[s:15]

回复 第4楼 的 statistics8888:

其实改成

MyFun=function(num)<br />
{<br />
  if(length(num)%%5!=0)<br />
    warning('The last group has less than 5 elements!')<br />
  tapply(num,as.integer(seq(1,by=0.2,along.with=num)),mean)<br />
}


就好,当然这样就只能用来计算平均值了。要计算range的话把mean改成range即可。
</p>