Поскольку мой CSV-файл поврежден, я читаю его в R, используя:
dataDT <- data.table::fread(".../test.csv", sep = NULL)
И он дает в наборе данных что-то вроде:
dataDT <- data.table("ColA,ColB,ColC,ColD" = c("1,10,some text... , some text,,20190801",
"2,22,some text... , some text,,20190801",
"3,30,some text... , some text,,20170601"))
dataDT
> dataDT
ColA,ColB,ColC,ColD
1: 1,10,some text... , some text,,20190801
2: 2,22,some text... , some text,,20190801
3: 3,30,some text... , some text,,20170601
Теперь, что я хочуэто разделить строку в каждой строке на 4 новых столбца :
targetDT <- data.table(ColA = c(1,2,3),
ColB = c(10,22,30),
ColC = c("some text... , some text,", "some text... , some text,", "some text... , some text,"),
ColD = c("20190801","20190801",'20170601'))
targetDT
> targetDT
ColA ColB ColC ColD
1: 1 10 some text... , some text, 20190801
2: 2 22 some text... , some text, 20190801
3: 3 30 some text... , some text, 20170601
Логика будет такой:
- ColA имеет строку перед 1-й запятой;
- В ColB есть все между 1-й и 2-й запятой;
- В ColD есть строка после последней запятой;
- В ColC есть строка в средней части (она может содержать дополнительные запятые).
Как выполнить приведенную выше логику?
Edit_1:
Чувствительные данные, извините, я не могу предоставить точные данные.Это выглядит так:
ID,Code1,Project_Name,Report_Date
1: 123123,1, A & B,20100101
2: 1413,2, C, D and E,20120101
3: 53163,333, F, G,20140303
4: 23453,44,This is a name,20160801
5: 12645,555,5th test, to continue,20190501
Итак, все до 1-й запятой определенно являются числами, как и все между 1-й и 2-й запятой.Все, что идет после последней запятой, определенно является 8-значным числом, похожим на дату.Средняя часть может содержать несколько запятых, но без кавычек (что, я думаю, является причиной того, что fread рассматривает запятую как разделитель).