У меня есть папка с 100 различными файлами .csv. Не все файлы содержат одинаковое количество переменных (различную структуру), поэтому я пытаюсь импортировать их все сразу и (создать отдельный фрейм данных для каждого CSV), а затем стандартизировать фреймы данных, добавив новый столбец или преобразовать столбец даты из символа в дату и экспортировать их сразу же в конце. Вот моя попытка, он будет работать для чтения всех CSV как отдельный фрейм данных
setwd(C:/Users/...)
files <- list.files(pattern="*.csv")
for(file in files)
{
perpos <- which(strsplit(file, "")[[1]]==".")
assign(
gsub(" ","",substr(file, 1, perpos-1)),
read.csv(paste(path,file,sep="")))
}
Однако, когда я добавляю функцию mutate
в assign
для добавления нового столбца, например, скрипт будет запустить, но не добавит ни одного столбца! Что мне здесь не хватает? Моя цель - добавить / манипулировать некоторыми переменными и снова экспортировать их, желательно в пределах tidyverse
for(file in files)
{
perpos <- which(strsplit(file, "")[[1]]==".")
assign(
gsub(" ","",substr(file, 1, perpos-1)),
read_csv(paste(path,file,sep="")),
mutate(. , Heading = "Data"))
}
Пример
df1 <- structure(list(datadate = structure(c(17927, 17927, 17927, 17927,
17927, 17927), class = "Date"), parent = c("grup", "grup",
"grup", "grup", "grup", "grup"), ads = c("P9",
"PS8", "PS7", "PS6", "PS5", "PS5"), chl = c("PSS9",
"PSS8", "PSS7", "PSS6", "PSS5", "PSS5"),
average_monthly = c(196586.49, 289829.43,
1363529.14, 380446.43, 147296.09, 948669.38), current_month = c(987118.82,
1682872.03, 4356755.73, 2225040.29, 922506.21, 5756525.08
), current_month_minus_1 = c(585573.1,
635763.37, 6551477.37, 818531.11, 255862.51, 1832829.99),
current_month_minus_2 = c(0, 0, 0, 0, 0,
0, 0, 0, 0, 0)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-6L))
df2<-
structure(
list(
network = c("STAR", "NPD", "GMD"),
datadate = structure(c(18259, 18259, 18259)),
brand = c("grup", "GFK", "MDG"),
average_weekly = c(140389.14,
10281188.25, 172017.39),
last_week_avg = c(89303.07,
6918460.99, 110594.64),
last_week_1_minus_avg = c(141765.83,
10248501.1, 222484.9),
last_week_2_minus_avg = c(138043.53,
9846538.57, 164185.21)
),
class = c("tbl_df", "tbl", "data.frame"),
row.names = c(NA, -3L)
)