заставить read.csv не видеть одиночные пробелы в качестве разделителя в R - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть много фреймов данных, которые иногда выглядят примерно так:

EC number   hits    family distribution
3.2.1.x 3   3 CBM32
3.2.1.1 2   2 CBM41
3.2.1.4 2   2 CBM3
2.4.1.18    1   1 CBM48
3.2.1.14    4   1 CBM2  1 CBM5  2 CBM16
3.2.1.39    4   3 CBM13 1 CBM32
3.2.1.50    1   1 CBM32
3.2.1.55    1   1 CBM13
3.2.1.68    2   2 CBM48

для последнего столбца иногда несколько записей, разделенных пробелом.

Я использую это для чтения это в R:

test=read.csv("path/to/summary.txt", header = TRUE, sep = "\t")

Но я получаю следующий вывод:

    EC.number  hits family.distribution
1   3.2.1.x 3   3 CBM32
2   3.2.1.1 2   2 CBM41
3   3.2.1.4 2   2 CBM3
4   2.4.1.18    1   1 CBM48
5   3.2.1.14    4   1 CBM2
6   1 CBM5  2 CBM16 
7   3.2.1.39    4   3 CBM13
8   1 CBM32     
9   3.2.1.50    1   1 CBM32
10  3.2.1.55    1   1 CBM13
11  3.2.1.68    2   2 CBM48

Как я могу обойти это? Я думаю, что объяснил свою проблему, но, пожалуйста, не стесняйтесь спрашивать дополнительную информацию, если у меня нет:)

1 Ответ

0 голосов
/ 10 февраля 2020

Вы можете попробовать прочитать данные в виде строки, затем изменить их (например, заменить все вкладки на один пробел, используя gsub) и , затем прочитать их как data.frame:

# Read the csv as text, so we can run it through gsub
#
file_connection <- file("path_to_csv.csv")
text <- readLines(file_connection)
close(file_connection)

После прочтения содержимого файла в виде строки мы можем иметь дело с текстом «форматирование»

Не видя фактической необработанной строки, я не могу сказать, что вам нужно сделать здесь , но идея состоит в том, чтобы исправить структуру, используя gsub:

Например: Здесь мы заменяем пробел в одном из столбцов на подчеркивания:

santized_names <- gsub("EC number", "EC_number", text, fixed=TRUE)

И затем заменяем один или несколько последующих пробелов или табуляций с запятой.

sanitized <- gsub("[ \t]+", ",", santized_names)    

После того, как все исправление сделано и содержимое выглядит правильно, мы соединяем строку обратно, добавляя символ новой строки после каждого элемента

sanitized <- paste0(sanitized, collapse="\n")

Полученную строку можно прочитать, как если бы она была содержимым .csv, используя аргумент text

df <- read.csv(text=sanitized)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...