簡體   English   中英

如何將na.rm作為參數傳遞給tapply?

[英]How to pass na.rm as argument to tapply?

我想從一個數據幀計算mean和sd,參數為一列,組標識為一列。 使用tapply時如何計算它們? 我可以使用sd(v1, group, na.rm=TRUE) ,但在使用tapply時無法使na.rm=TRUE符合語句。 omit.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

有任何想法如何完成這項工作?

只需在tapply函數中設置na.rm=TRUE

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

我認為這應該做你想要的。

  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)) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM