我有一個241列和114行的DF。第60列:241是我想根據變量組(T1和T2)進行配對t檢驗的數值。對於一個單獨的變量,我設法用reshape2包的acast命令和t.test來完成這項工作,但是如果我能夠找到一個命令爲所有182個變量自動執行此操作,那麼它將爲我節省大量的手動工作。在多個自動生成的數據框上執行t.test?
我設法使一個簡單的例子就是我想要的代碼:
> df
PatientID Group Immvar1 Immvar2
1 1 T1 4 5
2 2 T1 7 8
3 2 T2 9 10
4 3 T1 2 3
5 3 T2 4 5
6 4 T1 1 2
7 4 T2 9 10
> df1 <- as.data.frame(acast(df$PatientID ~df$Group, data = df, fill=0, value.var=("Immvar1")))
> df1
T1 T2
1 4 0
2 7 9
3 2 4
4 1 9
> t.test(df1$T1,df1$T2, paired=TRUE)
我已建成,使這個自動運行如下的代碼如下:
df2 <-df[,3:4]
modelList<-list()
for (i in 1:ncol(df2)) {
matrix <- formula(paste("as.data.frame(acast(PatientID ~ Group , data = df1, fill=0, value.var=(", names(df2[i]),")))"))
modelList[[i]] <-t.test(matrix$T1, matrix$T2, paired=TRUE)
}
但我總是得到運行此命令時出現錯誤消息:
匹配錯誤(x,table,nomatch = 0L):未找到對象'Immvar1'
也許我必須採取完全不同的方式,並且是不適合這種操作的模型師/配方組合。有人有想法做這個工作嗎?
非常感謝你!經過一些調整後,它也適用於我的原始數據集!真的很棒,爲我節省了很多工作!事實上,對於NA和0,你當然是完全正確的。我不知道你是否知道一個簡單的方法來做到這一點,但是也有可能R將t.test的結果排列在更多友善的方式?在進行線性迴歸時,我使用包裝掃帚進行整理和掃描,但我不知道t.test的替代方案。 –
我認爲你必須替換unlist(tmp [..通過unlist(x [...在代碼中,然後它很好用!!這是一個命令,我也可以將它應用到很多其他腳本中。非常多! –
固定,謝謝.. – Aaron