2016-10-05 8 views
1

Здесь я извлек небольшое количество csv-файла. http://www.sharecsv.com/s/8ccf9c932f3cbf7def2a4fd4ea30c6f7/test.csvКак разбить столбцы и сдвинуть значения столбца с помощью R

Th 02:56:21 M14  N60321J  IVL  13 OCC  0 LQ -112 BQ 0 EB0  LIT  1111 
Th 02:56:21 M14  N60341D  IVL  14 OCC  0 LQ -72  BQ 0 EB0  LIT  1111 
Th 02:56:21 M14  N60421K  IVL  115  OCC  0 LQ 0 BQ 0 EB0  LIT  0 
Th 02:56:21 M14  N60431E  IVL  12 OCC  0 LQ-3361  BQ 0 EB0  LIT  1111  
Th 02:56:21 M14  N60431E  IVL  13 OCC  0 LQ-3417  BQ 0 EB0  LIT  1111  

Как я могу использовать R разделить столбец "V13" в 2 колонки. Возьмите первую строку, например, первый столбец, представляющий текст «EB» и второй столбец, представляющий число «0».

Кроме того, форматирование 4-го и 5-го ряда слегка меняется. Все должно быть сдвинуто на один столбец. потому что столбец «V9» следует разбить на 2 столбца, первый из которых представляет «LQ», а второй представляет число «-3361»

Это небольшое количество данных и им не уверен, что текст всегда будет LQ и EB в большем файле.

ответ

0

Для столбца расщепления V13, вы можете использовать substring функцию:

dataframe$V13a = substring(dataframe$V13,1,2) #For first 2 characters 
dataframe$V13b = substring(dataframe$V13,3) #For characters 3 onwards 

Подвижные клетки через это более трудная задача решить в R, но вы можете сделать это с readLines() функции и некоторой предварительной обработки перед подачей его в data.frame:

lines <- readLines("path_to_file.csv") 
lines <- strsplit(lines, "(\\s+|(?<=[A-Z])(?=-))", perl=TRUE) 
as.data.frame(do.call(rbind, lines)) 

strsplit разбивает каждую строку, основываясь на регулярном выражении, либо один или несколько пробелов, или если символ с последующим -. Затем он объединяется в матрицу с использованием rbind через do.call (применяя функцию rbind ко всем элементам в списке строк), а затем преобразуется в data.frame.

Смежные вопросы