我有一個很大的數值數據集(〜700行,350,000列,以R中的data.table讀入)包含一些NA,我想用列方法代替儘可能。我發現以前的帖子用0代替NA,但是當我修改解決方案而不是輸入列的意思時,我得到j,即列號。似乎我必須錯過顯而易見的東西......關於如何計算列意味着使用這種方法的任何建議?最簡單的方法來推算列意味着大數據
Fastest way to replace NAs in a large data.table
#original code
f_dowle3 = function(DT) {
for(j in seq_len(ncol((DT)))
set(DT,which(is.na(DT[[j]])),j,0)
}
#modified code
impute = function(DT) {
for(j in 2:ncol(DT))
set(DT,which(is.na(DT[[j]])),j,mean(DT[,j],na.rm = TRUE))
}
test_impute = fread("test_impute.csv")
test_impute
ID snp1 snp2 snp3 snp4
1: 1 2 1 1 0
2: 2 2 2 0 0
3: 3 2 NA 0 NA
4: 4 2 1 2 0
5: 5 2 NA 2 0
6: 6 2 1 1 0
7: 7 1 1 NA 0
8: 8 NA 1 0 0
9: 9 2 2 2 NA
10: 10 1 1 0 0
impute(test_impute)
test_impute
ID snp1 snp2 snp3 snp4
1: 1 2 1 1 0
2: 2 2 2 0 0
3: 3 2 3 0 5
4: 4 2 1 2 0
5: 5 2 3 2 0
6: 6 2 1 1 0
7: 7 1 1 4 0
8: 8 2 1 0 0
9: 9 2 2 2 5
10: 10 1 1 0 0
非常感謝你!這解決了這兩個方法的工作!我會用後者,因爲它可能是一個更快的選項。 – bdarst
Fyi回答你的答案的第一部分,在切換選項之後,可以改變行爲。請參閱新聞中的第3條1.9.7:https://github.com/Rdatatable/data.table/blob/master/NEWS.md所以我可以做'options(datatable.WhenJisSymbolThenCallingScope = TRUE); dt [,1]'子集到第一列。 – Frank
哇,這是一個選項名稱的地獄。我確切知道它做了什麼。 – Gregor