Я искал возможные решения и нашел что-то, что частично работает для моего приложения. Я добавляю недостающие данные в существующий фрейм данных в «чанках» через al oop. В обновлении есть строки, которых нет в основной таблице.
Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно вставить строки из второй таблицы, которых нет в первой таблице, и заполнить в столбце Value1 с 0, где добавляются новые строки.
(Каждый SubDF имеет длину более 50 тыс. строк, и может быть 50 SubDF для итераций по MainDF, что приводит к 2,5-миллиметровой строке MainDF )
Текущий код: (простите за кодировку l oop, она не работает. Просто используйте ее для иллюстрации)
Main_DF
df_list <- c(Sub_DF1, Sub_DF2, SubDF3)
for (i in df_list){
Sub_DF <- i
############## Code in question
setDT(Main_DF)
setDT(Sub_DF)
Main_DF[Sub_DF,
on=c("Path1", "Path2","File_Name", "ID"),
c("value2") := .(i.value2)]
###############
}
Различные другие перестановки, которые я пробовал:
#
setDT(Main_DF)
setDT(Sub_DF)
setkeyv(Main_DF, c("Path1", "Path2","File_Name", "ID"))
setkeyv(Sub_DF, c("Path1", "Path2","File_Name", "ID"))
Main_DF<- Main_DF[Sub_DF]
#
Main_DF<- merge(Main_DF, Sub_DF, by = c("Path1", "Path2","File_Name", "ID"),
all = TRUE)
#
Main_DF[Sub_DF, on=c("Path1", "Path2","File_Name", "ID"),
c("Value2") := .(i.Value2)]
#
Main_DF[Sub_DF,]
#
Main_DF<- Main_DF[Sub_DF, on=c("Path1", "Path2","File_Name", "ID")]
#
Main_DF[Sub_DF, on=.("Path1", "Path2","File_Name", "ID"), `:=` (Value2=
i.Value2)]
#
Main_DF <- merge(Main_DF,Sub_DF,by=c("Path1", "Path2","File_Name", "ID"),all
=T, fill.NA = 0)
Main DF
Path1 Path2 File_Name ID Value1
root home Sample1 1 1
root home Sample1 2 0
root home Sample1 7 1
root home Sample2 1 0
root home Sample2 2 1
root home Sample2 3 1
root home Sample2 8 1
root home Sample3 1 0
root home Sample3 2 1
root home Sample3 6 1
Sub DF (1-я итерация l oop)
Path1 Path2 File_Name ID Value2
root home Sample1 1 5000
root home Sample1 2 9000
root home Sample1 5 400
root home Sample1 6 3500
root home Sample1 7 8500
root home Sample1 8 2200
Sub DF (2-я итерация l oop)
Path1 Path2 File_Name ID Value2
root home Sample2 1 5000
root home Sample2 2 9000
root home Sample2 3 700
root home Sample2 5 400
root home Sample2 6 3500
root home Sample2 7 8500
root home Sample2 8 2200
Sub DF (3-я итерация l oop)
Path1 Path2 File_Name ID Value2
root home Sample3 1 5000
root home Sample3 2 9000
root home Sample3 5 400
root home Sample3 6 3500
root home Sample3 7 8500
root home Sample3 8 2200
АКТУАЛЬНО Обновлен основной DF (после итерации 3-х SubDF)
Path1 Path2 File_Name ID Value1 Value2
root home Sample1 1 1 5000
root home Sample1 2 0 9000
root home Sample1 7 1 8500
root home Sample2 1 0 5000
root home Sample2 2 1 9000
root home Sample2 3 1 700
root home Sample2 8 1 8800
root home Sample3 1 0 5000
root home Sample3 2 1 9000
root home Sample3 6 1 3500
DESIRED Обновлено Main DF
Path1 Path2 File_Name ID Value1 Value2
root home Sample1 1 1 5000
root home Sample1 2 0 9000
root home Sample1 5 1 400
root home Sample1 6 1 3500
root home Sample1 7 0 8500
root home Sample1 8 0 2200
root home Sample2 1 0 5000
root home Sample2 2 1 9000
root home Sample2 3 1 700
root home Sample2 5 0 400
root home Sample2 6 0 3500
root home Sample2 7 0 8500
root home Sample2 8 1 2200
root home Sample3 1 0 5000
root home Sample3 2 1 9000
root home Sample3 5 0 400
root home Sample3 6 1 3500
root home Sample3 7 0 8500
root home Sample3 8 0 2200