2017-06-23 5 views
0

頻度のクロス集計を取得しました。つまり、A01列には1385個のCAGが6485個、14個のCAGに35個などあります。 私は、私は列A01の長いデータに変換することができました。それを使ってmeanとsdを計算します。しかし、私はn個の列を持っているので、どのようにこの関数をすべての列に適用するのか分かりません。列の範囲にreplicate()を使用して結果に統計を適用する

data <- data.frame(CAG = c(13, 14, 15), A01 = c(6485,35,132), A02 = c(0,42,56)) 
cag = rep(data$CAG, data$A01) 
mean <- mean(cag) 
stdef <- sd(cag) 
+1

たぶん、あなたは 'sapply'を探していますか? 'spply(data、function(x)c(mean = mean(x)、sd = sd(x)))'である。また、オブジェクトの一意の名前を使用する方が良いです。 'data'はRの関数も指します。 – lmo

+0

あなたがしようとしているように見えるのは、加重平均/ SDです。あれは正しいですか? 「この関数をすべての列に適用する」とは、重みとして「A01」を、重みとして「A02」を使用することを意味しますか? –

答えて

0
L = list() 

for (i in 1:ncol(data)){ 
    tmp = rep(data[i, 1], data[i, 2]) 
    mean = mean(tmp) 
    stdef = sd(tmp) 
    L[[i]] = cbind(mean, stdef) 
} 
Mx = do.call(rbind, L) 
Mx 
関連する問題