如何将na.rm作为参数传递给tapply?

如何将na.rm作为参数传递给tapply?,r,tapply,na.rm,R,Tapply,Na.rm,我想从一个数据帧计算平均值和sd,其中一列为参数,一列为组标识符。使用tapply时如何计算它们?我可以使用sd(v1,group,na.rm=TRUE),但在使用tapply时,无法将na.rm=TRUE放入语句中。 省略。na没有选项。我有一大堆参数,当排除所有缺少一个值的行时,我必须一步一步地检查它们,而不会丢失数据帧的一半 data("weightgain", package = "HSAUR") tapply(weightgain$weightgain, list(weightgain

我想从一个数据帧计算平均值和sd,其中一列为参数,一列为组标识符。使用
tapply
时如何计算它们?我可以使用
sd(v1,group,na.rm=TRUE)
,但在使用
tapply
时,无法将
na.rm=TRUE
放入语句中。
省略。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

x我想这应该是你想要的

  • 选择所需的列:

    v = c("x", "y")#or
    v = colnames(df)[1:2]
    
  • 使用
    sapply
    迭代
    v
    并将值传递给
    tapply

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

  • 只需在
    tapply
    功能中设置
    na.rm=TRUE

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

    差不多!我可以将其应用于表的几个组件,还是必须循环遍历参数列表
    tapply(df[c(“x”,“y”)],df$group,sd,na.rm=TRUE)
    左右?这个问题没有意义。使用
    help(tapply)
    您应该看到有一个
    ..
    参数,该参数被描述为提供将命名项传递给FUN函数的承诺。使用代码时出现了什么错误:
    tapply(df$V1,df$group,sd,na.rm=TRUE)
    我同意。被接受的答案似乎更复杂,而这一个就像一个魅力。