Tôi có một tập dữ liệu số lớn (~ 700 hàng, 350.000 cột, đọc dưới dạng dữ liệu.table trong R) chứa một số NA mà tôi muốn thay thế bằng cột có nghĩa là nhanh chóng càng tốt. Tôi tìm thấy một bài trước đó thay thế NA với 0, nhưng khi tôi sửa đổi các giải pháp để thay vào đó cột đầu vào có nghĩa là, tôi nhận được j, số cột. Có vẻ như tôi phải thiếu một cái gì đó hiển nhiên ... Bất kỳ gợi ý về cách tính cột có nghĩa là sử dụng phương pháp này?Cách nhanh nhất để bóp cột có nghĩa là với dữ liệu lớn
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
Cảm ơn bạn rất nhiều !! Điều đó cố định nó và cả hai phương pháp này hoạt động! Tôi sẽ sử dụng sau vì nó có thể là một lựa chọn nhanh hơn. – bdarst
Fyi lại phần đầu tiên của câu trả lời của bạn, trong devel sau khi toggling một tùy chọn, hành vi đó có thể được thay đổi. Xem mục 3 trong tin tức cho 1.9.7: https://github.com/Rdatatable/data.table/blob/master/NEWS.md Vì vậy, tôi có thể làm 'tùy chọn (datatable.WhenJisSymbolThenCallingScope = TRUE); dt [, 1] 'để tập hợp con col đầu tiên. – Frank
Wow, đó là một tên địa ngục. Tôi biết chính xác những gì nó làm. – Gregor