11

パラメータ用の1列とグループ識別子用の1列を持つデータフレームから平均とsdを計算したいと思います。を使用する場合、どのように計算できtapplyますか? を使用できますが、 を使用する場合、 をステートメントにsd(v1, group, na.rm=TRUE)収めることができません。 オプションはありません。たくさんのパラメーターがあり、1 つの欠損値を持つすべての行を除外するときに、データフレームの半分を失うことなく、それらを段階的に実行する必要があります。na.rm=TRUEtapplyomit.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

これを行う方法はありますか?

4

2 に答える 2

5

これはあなたが望むことをするべきだと思います。

  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))
    
于 2013-01-05T14:43:43.923 に答える