Fread в data.table, но слишком много столбцов

Недавно я обновил свой пакет 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

Можете ли вы поделиться несколькими строками файла, который вы пытаетесь прочитать, а не только неправильным результатом? Как и ваш звонок fread?

Gregor Thomas 10.12.2020 03:57

@GregorThomas - готово, спасибо за предложение.

nicshah 10.12.2020 04:08

Я думаю, что этот пример можно сделать намного проще, чтобы упростить отладку. Посмотрите мое предложенное редактирование и проверьте, является ли оно репрезентативным. Попытка определить проблему с помощью трех фрагментов может быть проще, чем сотни.

thelatemail 10.12.2020 04:33

Я могу быть совершенно глупым и неправильно читать файл справки ?fread, но он должен просто работать для приведенного примера, поскольку кавычки совпадают. Я даже не могу правильно проанализировать пример «встроенной цитаты» в справке ?fread. Я в тупике.

thelatemail 10.12.2020 04:56

@thelatemail мне тоже. Я перепробовал все, что мог придумать, и я абсолютно в тупике.

nicshah 10.12.2020 05:04
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
412
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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
thelatemail 10.12.2020 04:55

@jarod_mamrot - спасибо, но это удаляет кавычки, и мне нужно их сохранить

nicshah 10.12.2020 05:34
Ответ принят как подходящий

С версии 1.10.6 произошли изменения в правилах котировок. Теперь они более надежны и имеют лучшую производительность, но не будут обрабатывать несбалансированные кавычки и другие случаи. Проверьте подробности цитат в текущей документации fread.

В качестве альтернативы вы можете использовать функции, которые используют scan для обработки кавычек внутри кавычек, например read.table:

read.table("example.txt", sep = ",", header = TRUE)

Или, как ответил @jared-mamrot, используйте vroom для повышения производительности, преобразовав позже в data.table с помощью setDT

Другие вопросы по теме