2017-07-03 8 views
0

これまでのExcelのインデックスとマッチの同等のソリューションを見てきましたが、Rでデータを扱うことができません。 私は以下のサンプルデータセットを提供しました。 4つのサンプルがあり、測定値は「CAG」の頻度カウントであり、すなわちサンプルA01には13個のCAGの6485カウントがある。私はモーダルCAG(各列の最高測定値に対するCAGの値)を計算しました。私はpsych()を使ってデータの要約統計量を計算することもできました。次に、これらの結果を使って(mean-mode)/ sdを使って歪度を計算します。 各サンプルは対照サンプルを有する。 A02のコントロールサンプルはA01です。また、制御モード、すなわち(mean-ctrlmode)/ sdを使用して歪度を計算したいと思います。これを達成するには、コントロールサンプルのモードを参照して結果テーブルに戻す必要があります。私はここで私が立ち往生していることを示しました。あなたの助けに感謝しますか?インデックスと一致の同等のR

#Data set 
data <- data.frame(CAG = c(13, 14, 15, 17), 
       A01 = c(6485,35,132, 12), 
       A02 = c(0,42,56, 4), 
       A03 = c(33,5014,2221, 18), 
       A04 = c(106,89,436, 11)) 

settings <- data.frame(samples = c('A01', 'A02', 'A03', 'A04'), 
        control = c('A01', 'A01', 'A03', 'A03')) 

#Mode 
samplemode <- data.frame(samples = c('A01', 'A02', 'A03', 'A04'), 
       samplemode = (data[sapply(data[2:ncol(data)], which.max), ]$CAG)) 

#Summary statistics 
sumstats <- sapply(data[, 2:ncol(data)], function(x) { 
    data_e <- rep(data$CAG, x) 
    library(psych) 
    data.frame(
    describe(data_e) 
) 
}) 

sumstats <- as.data.frame(t(sumstats)) 

sumstats[] <- lapply(sumstats, function(x) { 
    as.numeric(x) 
}) 

# Results table 
results <- data.frame(samples = settings$samples, 
        samplemode = samplemode$samplemode, 
        control = settings$control, 
       ctrlmode = samplemode$samplemode[results$controls =  samplemode$samples], #THIS IS WHERE I'M HAVING TROUBLE 
        sumstats) 


# Skewness 
results$skewmode <- (results$mean - results$samplemode)/results$sd 
results$skewctrlmode <- (results$mean - results$ctrlmode)/results$sd 

#Expected results 
expected <- data.frame(samples = settings$samples, 
        skewmode = c(0.1565726, -0.4903837, 0.6321606, -0.5270822), 
        skewctrlmode = c(0.1565726, 2.4519186, 0.6321606, 0.6857736)) 
+0

あなたの期待される結果とは何ですか? –

+0

使用 結果の$ skewmode < - (結果は$意味 - 結果の$ samplemodeを)/結果は 結果の$ SD:0.1565726、-0.4903837、0.6321606、-0.5270822 使用して制御モードは、それは次のようになります。 0.1565726、 2.4519186、0.6321606、0.6857736 – Mike

+0

あなたの質問にdata.frameを追加して、希望の結果の実際のデータを加えてください。 –

答えて

2

これは動作するはずです:

results <- data.frame(samples = settings$samples, 
         samplemode = samplemode$samplemode, 
         control = settings$control, 
         ctrlmode = samplemode$samplemode[match(settings$control, 
                  samplemode$samples)], 
         sumstats) 

results$skewmode <- (results$mean - results$samplemode)/results$sd 
results$skewctrlmode <- (results$mean - results$ctrlmode)/results$sd 

    samples samplemode control ctrlmode vars n  mean  sd median trimmed mad min max range  skew kurtosis 
A01  A01   13  A01  13 1 6664 13.05207 0.3325666  13 13.00000 0 13 17  4 7.1106921 56.4222321 
A02  A02   15  A01  13 1 102 14.66667 0.6797398  15 14.60976 0 14 17  3 1.2624977 2.8577171 
A03  A03   14  A03  14 1 7286 14.30771 0.4867646  14 14.25918 0 13 17  4 1.0332600 0.9050386 
A04  A04   15  A03  14 1 642 14.56542 0.8245004  15 14.66342 0 13 17  4 -0.6341769 0.5311286 
      se skewmode skewctrlmode 
A01 0.004073907 0.1565726 0.1565726 
A02 0.067304270 -0.4903837 2.4519186 
A03 0.005702620 0.6321606 0.6321606 
A04 0.032540433 -0.5270822 0.6857736 
+0

完璧に働く素晴らしい感謝 – Mike

関連する問題