0
我想通過名稱在數據框中找到重複的樣本,然後計算它們的平均值。但首先,樣本名稱的平等測試不起作用(或'串聯',我不確定,因爲使用print()和write.table進行調試沒有幫助。)。我究竟做錯了什麼?R中數據幀的兩列標題的平等測試
我的數據表有20531行和1155列,我想要得到每行重複列的平均值。我測試了代碼(第一列標題是'基因ID',所以我跳過了dfs [,1],在平等測試後,我嘗試將目標列連接到一個數據框):
dfs <- as.data.frame(dfs)
for(i in 2:ncol(dfs)) {
oneOftheSamples <- data.frame(dfs[,i])
colnames(oneOftheSamples) <- colnames(dfs)[i]
head(oneOftheSamples)
wantedcolname <- colnames(oneOftheSamples)
n <- i
for (j in n:ncol(dfs)){
foundcolname <- colnames(dfs)[j]
if((wantedcolname==foundcolname) & (j!=i)){
repOftheSample <- data.frame(dfs[,j])
colnames(repOftheSample) <- colnames(dfs)[j]
oneOftheSamples <- data.frame(oneOftheSamples,repOftheSample)
}
}
}
任何提示或意見可能是有用的,在此先感謝!
對不起,我將修改我的答案與我的數據立即描述。我對R編程完全陌生,但有一點C++的經驗,所以我可能看起來像一個關於R數據結構的小虛擬。 無論如何,我理解你的代碼(至少我認爲),但它執行的方式與我的完整腳本相同: 「dfs.list [[x]]中的錯誤:下標越界 調用:sapply - > sapply - > lapply - > FUN - > apply「 我不認爲我試圖從邊界訪問數組。我試圖弄清楚我搞砸了。 感謝您的回覆! – szusz
我不認爲你有完全重複的列名稱。如果您將replace = TRUE更改爲FALSE以上,則沒有重複項,並且可以重現您的錯誤。當你用'read.table'或類似的東西讀取數據時,你有重複的colnames,你需要使用'check.names = FALSE';否則,雙絞線將被編碼爲「A,A.1,A.2」等。對於您的數據,「dups」或「dat.list」的長度是多少?如果它是零,那是你的問題。另外,我只是用一個數據框來運行上面的代碼,並在幾分鐘內在我的筆記本電腦上完成,所以您不應該有任何問題。 – rawr
謝謝,它幫了很多,我修好了!我使用read.columns而不是read.table(我必須從多個文件中讀取指定的列),並且在此函數中不能設置'check.names'參數,但現在我重寫了我的代碼。 – szusz