Недавно я обновил свой пакет data.table, и у меня возникли проблемы с функцией fread()
. Раньше (версия 1.10.4-3), если я использовал fread()
, он мог разделить данные, которые я читал, на столбцы. Более новая версия не может этого сделать, и если я использую тег fill = TRUE
, он забрасывает все это в столбец.
Проблема в том, что он обнаруживает 13 имен столбцов, но новая версия data.table пытается заполнить другие столбцы. Есть ли способ сделать это?
Это мой ввод, но новая таблица данных больше не может правильно разграничивать столбцы.
Я знаю, что могут быть другие пакеты, которые могут это сделать, но я бы предпочел использовать data.table, если это возможно.
id, value, other
1, "("a" = "b", "b" = "c", "c" = "d")", 2
2, "("a" = "b", "b" = "c", "c" = "d")", 3
@GregorThomas - готово, спасибо за предложение.
Я думаю, что этот пример можно сделать намного проще, чтобы упростить отладку. Посмотрите мое предложенное редактирование и проверьте, является ли оно репрезентативным. Попытка определить проблему с помощью трех фрагментов может быть проще, чем сотни.
Я могу быть совершенно глупым и неправильно читать файл справки ?fread
, но он должен просто работать для приведенного примера, поскольку кавычки совпадают. Я даже не могу правильно проанализировать пример «встроенной цитаты» в справке ?fread
. Я в тупике.
@thelatemail мне тоже. Я перепробовал все, что мог придумать, и я абсолютно в тупике.
Vroom обрабатывает ваш тестовый пример без добавления дополнительных столбцов, например.
library(vroom)
test <- vroom(file = "test.txt")
test
# A tibble: 2 x 3
id value other
<dbl> <chr> <dbl>
1 1 (a=b, b=c, c=d) 2
2 2 (a=b, b=c, c=d) 3
РЕДАКТИРОВАТЬ
Чтобы сохранить кавычки:
library(vroom)
test <- vroom(file = "test.txt", escape_double = FALSE)
test
# A tibble: 2 x 3
id value other
<dbl> <chr> <dbl>
1 1 ("a" = "b", "b" = "c", "c" = "d") 2
2 2 ("a" = "b", "b" = "c", "c" = "d") 3
read.csv
дает аналогичные результаты, отмечая, что это фактически меняет "a" = "b"
и т. д. на a=b
@jarod_mamrot - спасибо, но это удаляет кавычки, и мне нужно их сохранить
С версии 1.10.6 произошли изменения в правилах котировок. Теперь они более надежны и имеют лучшую производительность, но не будут обрабатывать несбалансированные кавычки и другие случаи. Проверьте подробности цитат в текущей документации fread.
В качестве альтернативы вы можете использовать функции, которые используют scan
для обработки кавычек внутри кавычек, например read.table
:
read.table("example.txt", sep = ",", header = TRUE)
Или, как ответил @jared-mamrot, используйте vroom
для повышения производительности, преобразовав позже в data.table с помощью setDT
Можете ли вы поделиться несколькими строками файла, который вы пытаетесь прочитать, а не только неправильным результатом? Как и ваш звонок
fread
?