2017-06-25 6 views
0

私はメジャーがCAGで、カラムA01、A02などはクロスカウントの頻度テーブルを持っています。すなわち13個のCAGの6485個のCAG14個の35個のカウントを含む。 各行のCAGがモードCAG値以上であれば、各列の値を合計したい。そして、それをA01の合計で割ります。これは、モードに等しいかそれ以上の値の割合を私に提供します。 私はそれを1つの列に対して機能させることができましたが、各列に関連するモードを使用して、各列に対して実行したいと思います。私は助けていただければ幸いです!複数の変数を持つlapply()を使用

data <- data.frame(CAG = c(13, 14, 15, 17), 
        A01 = c(6485,35,132, 12), 
        A02 = c(0,42,56, 4)) 

mode <- data$CAG[data$A01 == max(data$A01)] 

B <- lapply(data[, 2:ncol(data)], function(x) { 
    sum(x[data$CAG >= mode]) 
}) 

prop <- B/sum(data$A01) 
+0

そのままのコードは実行されません。 1つの列でどのように動作するかを示すはずですか?それとも、これは複数の列であなたの試みですか?私はそれが1つの列に対して正しいことを示唆していますが、モードが常にA01(コードの機能)であるか、各列に対して再計算する必要があるかどうかはわかりません( – Aaron

+0

) B < - 合計(データ$ A01 [データ$ CAG> =モード[1:1]] 小文字< - B/sum(データ$ A01) – Mike

答えて

1

モード計算も関数に入れる必要があります。

sapply(data[, 2:ncol(data)], function(x) { 
    mode <- data$CAG[which.max(x)] 
    B <- sum(x[data$CAG >= mode]) 
    B/sum(x) 
}) 
##  A01  A02 
## 1.0000000 0.5882353 

機能which.maxx==max(x)に(少なくともこの使用中)と等価です。

+0

すばらしいおかげでうまくいく – Mike

関連する問題