我正在嘗試使用相同數量和名稱的列和行在兩個數據庫中處理R中的數據。一個數據庫(database1)具有'1'和' - '來指示哪些單元格值得關注。另一個數據庫(database2)只是充滿了數據。在R中快速處理很多很多行
我試圖用' - '替換數據庫2中所有'無價值的數據'(在database1中用' - '標記)。
我的代碼運行良好,但它確實很慢。在每個電子表格中有1900行和〜8000列,代碼需要運行大約4個小時以上,這是不理想的。
我怎樣才能讓這段代碼更快?任何幫助! 謝謝!
下面的代碼(原諒變量名:P):
for (n in 1:nrow(poopy)){
list <- 0
gooddates <- colnames(additions[which(additions[n,] == ' 1 ' | additions[n,] == '1')]) #some cells have a '1' and others a ' 1 ', so this accounts for both.
for (j in 1:length(gooddates)){
nextdateindex <- which(gooddates[j] == colnames(additions))+1 #database1 is by month. database2 is by day, so I'm taking the intervals of gooddates.
if (is.na(colnames(additions)[nextdateindex])){
nextdateindex <- '6.26.2014'
couple <- cbind(gooddates[j], nextdateindex) #start and end intervals of gooddates
list <- rbind(list, couple)
}
else{
couple <- cbind(gooddates[j], colnames(additions)[nextdateindex])
list <- rbind(list, couple)
}
}
list <- list[-1,]
test <- poopy
if (is.null(nrow(list))){ ##some lists will only have one interval. this changes the indexing for some reason.
test <- test[n,-which(colnames(test) == list[1]):-(which(colnames(test) == list[2])-1)]
}
else{
for (i in 1:nrow(list)){
test <- test[n,-which(colnames(test) == list[i,1]):-(which(colnames(test) == list[i,2])-1)]
}
}
poopy[n,which((test == "--") == FALSE)[-1]] <- '--'
}
編輯:數據庫1爲一個月; DATABASE2每天,所以1和--s無法從數據庫1匹配一對一到數據庫2。我假設數據庫1中的1在整個月內保持爲1,這就是爲什麼我在'couple'變量中做了一個範圍,它將database1中的日期作爲第一個列名,nextdateindex Database1中的下一個數據點。希望澄清它!
非常接近,羅蘭。謝謝你的嘗試!
您是否可以包含poopy樣本數據集?如果數據不敏感,請輸入(head(poopy,10))' – Vlo
沒什麼特別。數據集1有 - 和1。數據集2有數字。不同之處在於Dataset1具有數個月的列,而dataset2具有所有日期的列,因此列數不同。 – Landmaster