r - 将新数据附加到 R 中的现有 csv 文件
问题描述
我正在做一个项目,我需要从远程站点绘制 10 天的数据。
我每 30 分钟通过 FTP 从远程计算机下载新数据(数据也每半小时写入一次)。本地(现场)文件路径每个月都会更改,因此我有一个基于当前日期的动态 IP 地址。
例如。
/data/sitename/2020/July/data.csv
/data/sitename/2020/August/data.csv
我的问题是在每个新月,我下载的 csv 都将位于一个新文件夹中,当我 FTP 新的 csv 文件时,它只会包含新月的数据,而不是前几个月的数据。
我需要绘制过去 10 天的数据。所以我希望做的是每半小时下载一次新数据,并且只将最新的记录附加到主数据集中。或者有没有更好的方法?
我(想我)需要做的是将 csv 下载到 R 中,并将新数据仅附加到主文件并删除最旧的记录,以便在 csv 中仅包含 10 天的数据。我到处搜索,但似乎无法破解它。
这似乎应该很容易,也许我使用了错误的搜索词。
我想要以下漂亮的(显示 10 行数据,我需要 480 10 天)。
初始数据
DateTime Data1 Data2 Data3 Data4 Data5
641 2020-08-26T02:31:59.999+10:00 10.00 53.4 3.101 42 20.70
642 2020-08-26T03:01:59.999+10:00 11.11 52.0 2.778 44 20.70
643 2020-08-26T03:31:59.999+10:00 2.63 105.5 2.899 45 20.70
644 2020-08-26T04:01:59.999+10:00 11.11 60.5 2.920 45 20.70
645 2020-08-26T04:31:59.999+10:00 3.03 101.3 2.899 48 20.70
646 2020-08-26T05:01:59.999+10:00 2.86 125.2 2.899 49 20.65
647 2020-08-26T05:31:59.999+10:00 2.86 132.2 2.899 56 20.65
648 2020-08-26T06:01:59.999+10:00 3.23 113.9 2.963 61 20.65
649 2020-08-26T06:31:59.999+10:00 3.45 113.9 3.008 64 20.65
650 2020-08-26T07:01:59.999+10:00 3.57 108.3 3.053 66 20.65
新数据
DateTime Data1 Data2 Data3 Data4 Data5
641 2020-08-26T02:31:59.999+10:00 10.00 53.4 3.101 42 20.70
642 2020-08-26T03:01:59.999+10:00 11.11 52.0 2.778 44 20.70
643 2020-08-26T03:31:59.999+10:00 2.63 105.5 2.899 45 20.70
644 2020-08-26T04:01:59.999+10:00 11.11 60.5 2.920 45 20.70
645 2020-08-26T04:31:59.999+10:00 3.03 101.3 2.899 48 20.70
646 2020-08-26T05:01:59.999+10:00 2.86 125.2 2.899 49 20.65
647 2020-08-26T05:31:59.999+10:00 2.86 132.2 2.899 56 20.65
648 2020-08-26T06:01:59.999+10:00 3.23 113.9 2.963 61 20.65
649 2020-08-26T06:31:59.999+10:00 3.45 113.9 3.008 64 20.65
650 2020-08-26T07:01:59.999+10:00 3.57 108.3 3.053 66 20.65
651 2020-08-26T07:31:59.999+10:00 3.85 109.7 3.125 70 20.65
所需数据
DateTime Data1 Data2 Data3 Data4 Data5
642 2020-08-26T03:01:59.999+10:00 11.11 52.0 2.778 44 20.70
643 2020-08-26T03:31:59.999+10:00 2.63 105.5 2.899 45 20.70
644 2020-08-26T04:01:59.999+10:00 11.11 60.5 2.920 45 20.70
645 2020-08-26T04:31:59.999+10:00 3.03 101.3 2.899 48 20.70
646 2020-08-26T05:01:59.999+10:00 2.86 125.2 2.899 49 20.65
647 2020-08-26T05:31:59.999+10:00 2.86 132.2 2.899 56 20.65
648 2020-08-26T06:01:59.999+10:00 3.23 113.9 2.963 61 20.65
649 2020-08-26T06:31:59.999+10:00 3.45 113.9 3.008 64 20.65
650 2020-08-26T07:01:59.999+10:00 3.57 108.3 3.053 66 20.65
651 2020-08-26T07:31:59.999+10:00 3.85 109.7 3.125 70 20.65
这就是我在...
library(RCurl)
library(readr)
library(ggplot2)
library(data.table)
# Get the date parts we need
Year <-format(Sys.Date(), format="%Y")
Month <- format(Sys.Date(), format="%B")
MM <- format(Sys.Date(), format="%m")
# Create the file string and read
site <- glue::glue("ftp://user:passwd@99.99.99.99/path/{Year}/{Month}/site}{Year}-{MM}.csv")
site <- read.csv(site, header = FALSE)
# Write table and create csv
EP <- write.table(site, "EP.csv", col.names = FALSE, row.names = FALSE)
EP <- fread("EP.csv", header = FALSE, select = c( 1, 2, 3, 5, 6, 18))
output<- write.table(EP, file = 'output.csv', col.names = c("A", "B", etc), sep = ",", row.names = FALSE)
#working up to here
# Append to master csv file
master <- read.csv("C:\\path\\"master.csv")
解决方案
您可以将DateTime
列转换为POSIXct
类,结合新数据和初始数据并获取最近 10 天的数据。
library(dplyr)
library(lubridate)
initial_data <- initial_data %>% mutate(DateTime = ymd_hms(DateTime))
new_data <- new_data %>% mutate(DateTime = ymd_hms(DateTime))
combined_data <- bind_rows(new_data, initial_data)
ten_days_data <- combined_data %>%
filter(between(as.Date(DateTime), Sys.Date() - 10, Sys.Date()))
推荐阅读
- sql - 按不同的值对 bigint 列进行分组
- unity3d - 统一使用 animator.play 更改动画速度?
- java - 将 .txt 文件逐行读入 ArrayList
- c# - WPF 将背景颜色绑定到具有可观察集合的按钮
- css - Angular --prod 问题与border-top-left-radius 和border-bottom-left-radius
- python - 获取所需格式的数据
- batch-file - 使用 .bat 文件运行指向特定 .cmm 文件的 .exe 并让它询问我输出 .cmm 文件的名称?
- python - 更改 CrosshairTool 线条样式
- swift - 具体数据获取 Firebase 数据库
- oracle - 如何处理 ssis 表达式中的 oracle regexp_like