2016-04-29 6 views
0

データフレームの小グループにt-testsを実行するループをコーディングする必要があります。私は彼らがfor loopを使用することを推奨したと思います。 データフレームには271行あります。最初の260行は13のグループ20に分割する必要があり、t-testは13グループのそれぞれで実行する必要があります。ループ内のデータフレームのグループでループを実行する

これは、私がデータフレーム全体にt-testを実行するために使用するコードです:

t.test(a, c, alternative =c("two.sided"), mu=0, paired=TRUE, var.equal=TRUE, conf.level=0.95) 

私はコーディングのnoobだ、助けてください! D:

答えて

1

まず、data.frameは表示されません。 acはベクターのようです。私は、これらの両方のベクトルの長さが271で、最後の11項目を無視したいとします。したがって、これらのアイテムを先に投げることができます:

a2 <- a[1:260] 
c2 <- c[1:260] 

ここで、サブセットのインデックスを決定する長さ260のベクトルを作成することができます。 (そここれを行うには多くの方法がありますが、私はこの方法が理解しやすいと思います。)

indices <- as.numeric(cut(1:260, 20)) 
indices #just to show the output 

はおそらく、リストに出力を格納する必要があります。次のコードは、やはり最も効率的ではありませんが、理解しやすいものです。私は願っています

result2 <- lapply(1:20, function(i) t.test(a2[which(indices == i)], 
              c2[which(indices == i)], 
              alternative = c("two.sided"), 
              mu = 0, paired = TRUE, var.equal = TRUE, 
              conf.level = 0.95)) 
result[[1]] # ... 

:あなたはまた、通常より短く、より効果的かつビットですlapplyを使用することができます(それは、260のデータポイントのために重要ではありません)-loop forに代わるものとして

result <- list() 
for (i in 1:20){ 
    result[[i]] <- t.test(a2[which(indices == i)], c2[which(indices == i)], 
         alternative = c("two.sided"), 
         mu = 0, paired = TRUE, var.equal = TRUE, 
         conf.level = 0.95) 
} 
result[[1]] #gives the results of the first t-test (items 1 to 20) 
result[[2]] # ... 

それはあなたの質問に答える。

+0

ごめんなさい、私はデータフレームが大きすぎて乱雑であると考えました。 AとCはデータフレームの列を表します ありがとうございました! – Emilia

関連する問題