«встроенный nul в строку» с помощью fread (перепробовал все другие методы, но не смог решить)

Я использую Mac с RStudio 0.99.489 и R3.2.2. У меня есть CSV-файл размером 1 ГБ, он не совсем большой, но все равно занимает около 5 минут, если я пытаюсь импортировать его с помощью read.csv, а у меня много файлов такого размера, поэтому я попробовал fread(). Прочитав предыдущие вопросы, я узнал, что эта ошибка может быть связана с отсутствующими значениями даты (обычные записи будут выглядеть как «03 мая 1995: 15: 31: 50» для столбца даты, однако там, где возникает ошибка, это выглядит как «05 мая»).

Я попробовал sed 's/\\0//g' mycsv1.csv > mycsv2.csv, как указано в "Встроенный нуль в string' при импорте csv с помощью fread, но то же самое сообщение об ошибке все еще появляется.

sed -i 's/\\0//g' /src/path/mycsv.csv просто не работает для меня, терминал сообщает об ошибке для этой командной строки (я не очень хорошо знаком с этими командными строками, поэтому я не понимаю их логику)

Я попытался

file <- "file.csv"
tt <- tempfile()  # or tempfile(tmpdir="/dev/shm")
system(paste0("tr < ", file, " -d '\\000' >", tt))
fread(tt)

из "Встроенный нуль в строку", когда импортируя большой CSV (8 ГБ) с помощью fread(), я думаю, он удалил записи, в которых отсутствует значение, потому что, когда я запускаю fread(tt), R говорит

Error in fread(tt) : 
  Expecting 5 cols, but line 5060627 contains text after processing all cols. It is very likely that this is due to one or more fields having embedded sep=',' and/or (unescaped) '\n' characters within unbalanced unescaped quotes.

После этого я попробовал iconv -f utf-16 -t utf-8 myfile1.csv > myfile2.csv, потому что похоже, что это было вызвано какой-то проблемой с fread, которая не может понять utf-16, и может быть что-то не так с этой командной строкой, но она просто дает мне электронную таблицу со случайными символами.

И я видел это

vim filename.csv

:%s/CTRL+2//g

ESC  #TO SWITCH FROM INSERT MODE

:wq   # TO SAVE THE FILE

from Ошибка с fread в R - встроенный nul в строку : '\0', но после того, как я ввел vim filename.csv, терминал просто прочитал всю электронную таблицу, и я не смог ввести вторую команду (:%s/CTRL+2//g), опять же, я не совсем понимаю эти командные строки, поэтому, возможно, мне нужно внести некоторые коррективы в мою ситуацию.

Спасибо за помощь!


person ttothef    schedule 22.12.2015    source источник


Ответы (1)


пытаться

sed -i 's/\x0//g' my_file

or

cat my_file|tr -d '\000' > new_file
person repzero    schedule 22.12.2015
comment
для sed -i 's/\x0//g' my_file терминал возвращает: sed: 1: my_file.csv: недопустимый код команды C. Для второго терминал возвращает использование: tr [-Ccsu] string1 string2 tr [- Ccu] -d строка1 tr [-Ccu] -s строка1 tr [-Ccu] -ds строка1 строка2 и то же сообщение об ошибке «встроенный nul в строку» все еще отображается. - person ttothef; 22.12.2015
comment
это файл csv, я использую Mac и пробовал в терминале - person ttothef; 22.12.2015
comment
замените my_file на путь к вашему файлу - person repzero; 22.12.2015
comment
ой! я уже в каталоге, где я хранил свои данные, мне все еще нужно указать путь? - person ttothef; 22.12.2015
comment
Я не знаю, находится ли файл в подкаталоге... что вы можете сделать, так это перетащить файл из окна дисплея в оболочку, где он должен быть размещен - person repzero; 22.12.2015
comment
Я пробовал это, все еще не работает... и для 'cat my_file|tr -d '\000' › new_file', когда я использую fread(), R выдает мне сообщение об ошибке "Ожидается 5 столбцов, но строка 5060627 содержит текст после обработки всех столбцов. Я не уверен, что делать... - person ttothef; 22.12.2015