使用@ thelatemail的輸入,你很可能會做下面的事情,這裏用一個可重現的例子來說明。 df
是你的data.frame,當我與dplyr
一起工作時,我也會在這裏使用它。
require(dplyr)
df <- data.frame(
+ name = sample(letters[1:10]),
+ c1 = sample(1:10),
+ c2 = sample(1:10),
+ t1 = sample(1:10),
+ t2 = sample(1:10))
df
name c1 c2 t1 t2
1 i 7 3 8 2
2 h 6 4 4 8
3 g 4 6 6 5
4 b 5 1 9 10
5 a 9 5 3 7
6 j 8 9 5 3
7 d 10 8 10 4
8 c 2 2 2 1
9 e 1 10 7 6
10 f 3 7 1 9
df1 <- df %>% select(contains("c"))
df2 <- df %>% select(contains("t"))
Map(t.test, as.data.frame(df1), as.data.frame(df2))
但是,我不entirley肯定這是你想做的事,因爲這似乎循環功能在列而不是行。因此,有點哈克溶液(請別人告訴我一個更簡單的方法),我會做到以下幾點:
require(tidyr)
df2 <- gather(df, condition, measurement, c1:t2)
df3 <- spread(df2, name, measurement)
df3$condition2 <- ifelse(grepl("c", df3$condition), "c", "t")
#check dimensions of new df3
for(i in 2:11){cat(colnames(df3)[i],'\n')
+ y <- df3[, i]
+ res <- t.test(y~df3$condition2, var.equal=T)
+ print(res)
+ }
注:我已經添加了var.equal = T假設你想要做一個two sample t.test()
我相信這給你t.test
你想要的數據。
使用'Map'來匹配治療和控制列,如:http://stackoverflow.com/questions/26269163/mapply -complete-for-columnwise-t-test-of-two-dataframes -r/26269215 – thelatemail
Thankyou,這非常有幫助。然而,使用這些代碼,我得到了整個列的整體結果,即c1,c2等的t統計量,但我需要每列和行的結果,即名稱1 c1,名稱1 c2等的結果,然後名稱2 c1,名稱2 c2等等,用於大約22,000個名稱的數據集。也許所描述的功能是這樣工作的,而且我錯誤地實現了它們? – user5688971