使用带有NA的数据进行tapply

时间:2015-02-03 21:29:04

标签: r

我有一个有一些NA的数据列(Percent.Plant.Parasites)。我想把这些数据的平均值按因子排序" Stage" (即stage1 Mean = x,stage2 Mean = y等)。我尝试使用

这样做
tapply(rawdata$Percent.Plant.Parasites, rawdata$Stage, mean)

但是,由于数据中存在NA,因此我获得了NA。我不相信tapply有一个na.rm选项(有吗?),所以我尝试使用以下方法计算每个阶段因子的平均值:

mean(subset(rawdata,subset=Stage=="stage1")$Percent.Plant.Parasites, na.rm=TRUE)

无济于事。相反,我得到了错误:

In mean.default(subset(rawdata, subset = Stage == "Kax")$Percent.Plant.Parasites,  :

参数不是数字或逻辑:返回NA

然而,当我这样做时:

typeof(subset(rawdata,subset=Stage=="Kax")$Percent.Plant.Parasites)

我得到integer

我出错的任何想法?

感谢。

1 个答案:

答案 0 :(得分:0)

为什么不创建一个新函数,称之为mean_NA,在计算均值之前简单地删除NA,然后在tapply中使用该函数?类似的东西:

mean_NA<-function(v){
    avg<-mean(v, na.rm = T)
return (avg)
}

如评论所述,请确保您采用的数据是数字/整数,而INDEX是因子(组)。你可以像这样使用新创建的函数:

tapply(X = rawdata$Percent.Plant.Parasites, INDEX = rawdata$Stage, mean_NA)