如何通过na.rm作为参数传递给tapply?(How to pass na.rm as argum

2019-08-05 17:26发布

我倒是希望计算平均和SD从数据帧与该参数的一列和一组标识符一列。 我如何使用时,计算它们tapply ? 我可以使用sd(v1, group, na.rm=TRUE)但不容适合na.rm=TRUE当使用到语句tapplyomit.na没有选项。 我有一大堆的参数,并要经过没有一个缺失值排除所有线路时丢失数据帧的一半他们一步一步来。

data("weightgain", package = "HSAUR")
tapply(weightgain$weightgain, list(weightgain$source, weightgain$type), mean)

这同样适用于真正by声明。

x<-c(1,2,3,4,5,6,7,8,9,NA)
y<-c(2,3,NA,3,4,NA,2,3,NA,2)
group<-rep((factor(LETTERS[1:2])),5)
df<-data.frame(x,y,group)
df

by(df$x,df$group,summary)
by(df$x,df$group,mean)

sd(df$x) #result: NA
sd(df$x, na.rm=TRUE) #result: 2.738613

任何想法如何完成这件事?

Answer 1:

我想这应该做你想要什么。

  1. 选择您需要的列:

     v = c("x", "y")#or v = colnames(df)[1:2] 
  2. 使用sapply遍历v和值传递给tapply

     sapply(v, function(i) tapply(df[[i]], df$group, sd, na.rm=TRUE)) 


Answer 2:

只需设置na.rm=TRUEtapply功能:

tapply(weightgain$weightgain, list(weightgain$source, weightgain$type), mean, na.rm=TRUE)


文章来源: How to pass na.rm as argument to tapply?
标签: r tapply na.rm