Обновите фрейм данных, сравнив записи полей даты во втором фрейме данных, и добавьте только новые записи - PullRequest
0 голосов
/ 21 марта 2020

Я хочу сравнить поле Дата двух фреймов данных и добавить только самые последние записи из второго. Первый фрейм данных имеет последние записи. Эти записи обновляются ежедневно с сайта. Второй читает записи из файла CSV, который я сохранил за предыдущий день.

данные, которые я читаю из inte rnet:

df_new<-structure(list(DCounter = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
   CCounter = c(125L, 36L, 22L, 17L, 11L, 8L, 4L, 20L, 8L, 3L), 
   RCounter = c(24L, 33L, 34L, 50L, 33L, 21L, 62L, 10L, 20L, 31L), 
   CrCounter = c(1L, 1L, 8L, 2L, 2L, 8L, 2L, 3L, 0L, 1L), 
   Date = c("20/03/2020", "19/03/2020", "18/03/2020", "17/03/2020", "16/03/2020", "15/03/2020", "14/03/2020", "13/03/2020", "12/03/2020","11/03/2020")), 
   class = "data.frame", row.names = c(NA, 10L))

Отформатируйте поле даты, чтобы оно было датой. введите и переименуйте поле

df_new$Date = as.Date(df_new$Date, format = "%d/%m/%y")
colnames(df_new)<-c("D","C","R","Cr","Date")

#old data- read from csv file has data from yesterday
#----------------------
#df_old <- read.csv("df_Saved.csv",header=T)

df_old<-structure(list(D = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
   C = c(6L, 12L, 7L, 11L, 8L, 4L, 20L, 8L, 3L, 4L, 1L, 3L, 3L, 0L, 2L, 0L, 0L, 10L, 1L, 0L, 2L, 17L, 15L, 6L, 5L), 
   R = c(3L,3L, 0L, 3L, 2L, 2L, 0L, 0L, 3L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
   Cr = c(1L, 0L, 0L, 0L, 0L, 2L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
   Date = structure(c(17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 25L, 24L, 23L, 22L, 21L, 20L, 19L, 18L, 7L, 6L, 5L, 4L, 3L, 2L, 1L), 
   .Label = c("2/24/2020", "2/25/2020", "2/26/2020", "2/27/2020", 
"2/28/2020", "2/29/2020", "3/1/2020", "3/10/2020", "3/11/2020", "3/12/2020",
 "3/13/2020", "3/14/2020", "3/15/2020", "3/16/20", "3/17/20", "3/18/20",
 "3/19/20", "3/2/2020", "3/3/2020", "3/4/2020", "3/5/2020", "3/6/2020", "3/7/2020", "3/8/2020", "3/9/2020"), class = "factor")), 
class = "data.frame", row.names = c(NA, -25L))

Получите сегодняшнюю дату и отформатируйте ее

#--------------

dateToAdd<-format(Sys.time(), "%Y/%m/%d")

#extract ONLY updated dates
df_newExtracted<- with(df_new, df_new[(Date >= dateToAdd), ])
  if(df_old$Date[1]< df_newExtracted$Date[1] ){
      df_final<-rbind(df_newExtracted,df_old)
      cat("Add New records\n")  

}else{
     df_final<-df_old
     cat("Nothing new \n")  
}

df_final

write.csv(df_final, "df_Saved.csv", row.names=FALSE)

Я не смог выяснить причину проблемы root, иногда, если разница в дате В один день это работает, а иногда разница 2 дня, это не работает. Иногда, если df_newExtracted представляет дату, которая не была обновлена ​​сайтом, как, например, например: если мы запустили код сегодня, а они все еще не обновили свои записи, переменная будет пустой и cra sh все вычисления ,

Некоторые предлагают проблему, связанную с записью в CSV-файл и чтением CSV-файла, который изменит формат и сделает файл нестабильным, и я должен использовать lubridate, поэтому я добавил строки форматирования. Любое предложение?

...