這是R: t-test over all columnsR:t檢驗過的所有子集在所有列
假設一個跟進的問題,我有一個巨大的數據集,然後創建基於某些條件衆多的子集。子集應具有相同的列數。然後我想一次對兩個子集進行t檢驗(外部循環),然後對於每個子集的組合,一次一列地檢查所有列(內部循環)。
這是我根據以前的答案提出的。這一個停止了一個錯誤。
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 2012-03-12 15:39:43
這不完全清楚你想要你的代碼做什麼。 您的意思是在子集1中的c1和子集2中的c1之間進行測試,然後在子集1中的c2和子集2中的c2上進行t檢驗? 快速瀏覽一下你的Data.Subsets只是一個字符向量。它實際上並不包含你所做的任何數據框子集。因此使用循環來完成任何操作都不會產生任何效果,因爲您想要處理數據框並且您正在傳遞代碼字符串。 – 2012-03-12 15:58:58
@DavyKavanagh:是的,Data.Subsets只是一個字符向量。我試圖使用as.data.frame將其轉換爲數據框,但結果相同。我想要做的是:捕獲這些數據子集名稱,並訪問循環中的實際數據子集。我猜想相關的問題是:如何將數據幀作爲循環中的參數傳遞? – ery 2012-03-12 16:24:13