我有一个有一些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
我出错的任何想法?
感谢。
答案 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)