2012-09-21 49 views
2

我有兩個數據幀,我想對行進行獨立的2組t測試(iettest(y1,y2),其中y1是dataframe1中的一行,y2是匹配在dataframe2行)R:t測試2個數據幀的行

什麼是完成此最佳方式?

編輯: 我剛剛發現格式:dataframe1 [i,] dataframe2 [i,]。這將循環工作。這是最佳解決方案嗎?

回答

5

您列出的方法是合理的,只需確保預先分配存儲矢量。我會仔細檢查你是否真的想比較行而不是列。大多數我的工作與數據集有每一行作爲觀察單位,列表示單獨反應/姑興趣列,這是你的數據 - 所以,如果這就是你需要做的,這裏有一個辦法:

#Fake data 
df1 <- data.frame(matrix(runif(100),10)) 
df2 <- data.frame(matrix(runif(100),10)) 


#Preallocate results 
testresults <- vector("list", nrow(df1)) 
#For loop 
for (j in seq(nrow(df1))){ 
    testresults[[j]] <- t.test(df1[j,], df2[j,]) 
} 

你現在有一個列表,只要您有df1中的行。然後我會推薦使用lapplysapply來輕鬆地從列表對象中提取事物。

+0

謝謝你的智慧的話。我確實不得不在整個行上進行測試,也許我的文件設計很差。下次我會記住! – bdeonovic

+0

@Chase我不知道你是否可以在解決方案中使用'paired = T'進行配對t檢驗。目前它給了我一個錯誤... –

1

將數據存儲爲列會更有意義。

可以移調通過

df1_t <- as.data.frame(t(df1)) 
df2_t <- as.data.frame(t(df2)) 

一個data.frame然後你就可以在一個時間

t.test_results <- mapply(t.test, x= df1_t, y = df2_t, SIMPLIFY = F) 

使用mapply循環通過兩個data.frames一列或者你可以使用Map這是一個簡單的包裝mapplySIMPLIFY = F(從而節省擊鍵!)

t.test_results <- Map(t.test, x = df1_t, y = df2_t) 
+1

我錯過了爲什麼'as.data.frame(t(df1))'不起作用? – Chase

+0

有趣的解決方案,謝謝! – bdeonovic

+0

不,我只是以一種非常複雜的方式去做......(現在改變了) – mnel