これはR: t-test over all columnsR:t検定すべてのサブセットを超えるすべての列の上に
からのフォローアップの質問ですが、私は巨大なデータセットを持って、その後、私は特定の条件に基づいて、多くのサブセットを作成したとします。サブセットの列数は同じでなければなりません。次に、私は一度に2つのサブセット(外側のループ)でt検定を行い、その後、各サブセットの組み合わせに対して、すべての列を一度に1列ずつ(内部ループ)調べます。
これまでの回答に基づいています。これはエラーで停止します。
C <- c("c1","c1","c1","c1","c1",
"c2","c2","c2","c2","c2",
"c3","c3","c3","c3","c3",
"c4","c4","c4","c4","c4",
"c5","c5","c5","c5","c5",
"c6","c6","c6","c6","c6",
"c7","c7","c7","c7","c7",
"c8","c8","c8","c8","c8",
"c9","c9","c9","c9","c9",
"c10","c10","c10","c10","c10")
X <- rnorm(n=50, mean = 10, sd = 5)
Y <- rnorm(n=50, mean = 15, sd = 6)
Z <- rnorm(n=50, mean = 20, sd = 5)
Data <- data.frame(C, X, Y, Z)
Data.c1 = subset(Data, C == "c1",select=X:Z)
Data.c2 = subset(Data, C == "c2",select=X:Z)
Data.c3 = subset(Data, C == "c3",select=X:Z)
Data.c4 = subset(Data, C == "c4",select=X:Z)
Data.c5 = subset(Data, C == "c5",select=X:Z)
Data.Subsets = c("Data.c1",
"Data.c2",
"Data.c3",
"Data.c4",
"Data.c5")
library(plyr)
combo1 <- combn(length(Data.Subsets),1)
adply(combo1, 1, function(x) {
combo2 <- combn(ncol(Data.Subsets[x]),2)
adply(combo2, 2, function(y) {
test <- t.test(Data.Subsets[x][, y[1]], Data.Subsets[x][, y[2]], na.rm=TRUE)
out <- data.frame("Subset" = rownames(Data.Subsets[x]),
, "Row" = colnames(x)[y[1]]
, "Column" = colnames(x[y[2]])
, "t.value" = round(test$statistic,3)
, "df"= test$parameter
, "p.value" = round(test$p.value, 3)
)
return(out)
})
})
'str(Data.Subsets)'を見てください。 – joran
あなたのコードで何をしたいかは完全にはっきりしていません。 サブセット1のc1とサブセット2のc1の間にテストを実行した後、サブセット1のc2とサブセット2のc2などについてt検定を実行することを意味しますか? Data.Subsetsは単なる文字ベクトルです。実際には、作成したデータフレームサブセットは実際には含まれません。データフレームを扱い、コード文字列を渡したいからです。 –
@DavyKavanagh:はい、Data.Subsetsは単なる文字ベクトルです。私はas.data.frameを使ってデータフレームに変換しようとしましたが、同じ結果が得られました。私がしたかったのは、これらのデータのサブセット名を取得し、ループ内の実際のデータサブセットにアクセスすることでした。適切な質問は、ループ内のパラメータとしてデータフレームを渡す方法ですか? – ery