我正在尝试根据名为ASOFDATE的字段,弄清楚如何从SQL Server表中提取数据并将一个表的内容保存到单独的CSV文件中。我的ASOFDATE是月结束日期。
这是我到目前为止所拥有的。
library(RODBC)
# connect to database
dbhandle = odbcDriverConnect('driver={SQL Server};server=SERVER_NAME;database=DATABASE_NAME;trusted_connection=true')
sampledata <- sqlQuery(dbhandle, "select * from [SERVER].[dbo].[TABLE]")
# Close the connection
close(dbhandle)
# Create a Date vector containing the 1st of all the subsequent months and subtract 1 day
# date.end.month <- seq(as.Date("2012-02-01"),length=4,by="months")-1
ASOFDATE <- seq(as.Date("2016-02-01"),length=12,by="months")-1
在某种程度上,我认为我需要遍历DataFrame,但我不知道该怎么做。
for (i in sampledata) {
do some kind of filter by ASAOFDATE
write.csv(sampledata, paste0("C:/Users/RSMITH/Desktop/test/", ASOFDATE, ".csv"), row.names = FALSE)
}
因此,例如,我使用它来从表中获取数据。
dataset&lt; - sqlFetch(dbhandle,“DATA”)
数据集包含以下字段: N_ID,SEQ_NO,REPORT_PERIOD_END,CONTACT_ID,CONSOL_KEY,CUSTOMER_NAME,COMPANY_CODE,SECTOR,人员,ASOFDATE,COMPANY,REPORT_LINE
我创建了一个月份结束日期列表,我希望“过滤”以获取: ASOFDATE&lt; - seq(as.Date(“2016-02-01”),length = 12,by =“months”) - 1
然后,根据ASOFDATE在表格中“过滤”记录,并将每个块保存为CSV,日期在文件名中。
我100%确定这是可能的,但我只是不知道如何将数据分成块并保存每个块。
答案 0 :(得分:1)
您可以在此处使用tidyverse
。首先,创建一个路径向量,您将文件保存到该路径。然后,根据此list
和ASOFDATE
将您的数据拆分为walk
,并保存列表中的元素。
library(tidyverse)
paths <- paste0("Desktop/", sampledata$ASOFDATE, ".csv")
sampledata %>%
split(.$ASOFDATE) %>%
walk2(., paths, ~write_csv(.x, .y))
sampledata <- data_frame(
ASOFDATE = seq(from = as.Date("2017-05-01"), as.Date("2017-05-05"), "days"),
var1 = 1:5,
var2 = 1:5
)