У меня та же проблема, что и в здесь, с той лишь разницей, что CSV-файл содержит не_английскую строку, и я не смог найти для нее решения: когда я читаю файл csv без кодировки, он не дает мне ошибки, но данные изменились на:
network=read.csv("graph1.csv",header=TRUE)
اشپیل(60*4)
И если я запускаю read.csv
с fileEncoding
, это дает мне эту ошибку:
network=read.csv("graph1.csv",fileEncoding="UTF-8",header=TRUE)
Warning messages:
1: In read.table(file = file, header = header, sep = sep, quote = quote, :
invalid input found on input connection 'graph1.csv'
2: In read.table(file = file, header = header, sep = sep, quote = quote, :
incomplete final line found by readTableHeader on 'graph1.csv'
network[1]
[1] X.
<0 rows> (or 0-length row.names)
Системная информация :
windows server 2008
R:R3.1.2
Пример файла:
node1,node2,weight
ورق800*750*6,ورق 1350*1230*6mm,0.600000024
ورق900*1200*6,ورق 1350*1230*6mm,0.600000024
ورق76*173,ورق 1350*1230*6mm,0.600000024
ورق76*345,ورق 1350*1230*6mm,0.600000024
ورق800*200*4,ورق 1350*1230*6mm,0.600000024
2 ответа
Я попробовал с вашим вводом это:
> read.csv("graph1.csv", encoding="UTF-8")
X.U.FEFF.node1 node2 weight
1 <U+0648><U+0631><U+0642>800*750*6 <U+0648><U+0631><U+0642> 1350*1230*6mm 0.6
2 <U+0648><U+0631><U+0642>900*1200*6 <U+0648><U+0631><U+0642> 1350*1230*6mm 0.6
3 <U+0648><U+0631><U+0642>76*173 <U+0648><U+0631><U+0642> 1350*1230*6mm 0.6
4 <U+0648><U+0631><U+0642>76*345 <U+0648><U+0631><U+0642> 1350*1230*6mm 0.6
5 <U+0648><U+0631><U+0642>800*200*4 <U+0648><U+0631><U+0642> 1350*1230*6mm 0.6
Warning message: In read.table(file = file, header = header, sep = sep, quote = quote, : invalid input found on input connection 'graph1.csv'.
, и только второе предупреждение решено, и теперь он просто читает файл заголовка. [1] node1 node2 weight <0 rows> (or 0-length row.names)
Должно работать следующее — заметьте, проверить не могу, так как у меня нет Windows (а Windows, Unicode и R просто не сочетаются):
x = read.csv('graph1.csv', fileEncoding = '', stringsAsFactors = TRUE)
На данный момент x
является тарабарщиной, так как он был прочитан как есть, без разбора байтовых данных в кодировку. Мы должны быть в состоянии проверить это:
Encoding(x[1, 1])
# [1] "unknown"
Теперь мы говорим R обрабатывать его как UTF-8:
x = as.data.frame(lapply(x, iconv, from = 'UTF-8', to = 'UTF-8),
stringsAsFactors = FALSE)
Эти два шага можно объединить в один, используя encoding
вместо fileEncoding
в качестве аргумента для read.csv
:
x = read.csv('graph1.csv', encoding = 'UTF-8', stringsAsFactors = TRUE)
В обоих случаях происходит примерно один и тот же процесс.
На этом этапе x
все еще выглядит как тарабарщина, поскольку ваш терминал в Windows предположительно не поддерживает кодовую страницу Unicode, которую понимает R. Фактически, при запуске кода с кодовой страницей, отличной от UTF-8, на Mac я получаю следующий вывод:
x[1, 1]
# [1] "<U+0648><U+0631><U+0642>800*750*6"
Однако, по крайней мере, кодировка теперь выставлена правильно, а байты разобраны:
Encoding(x[1, 1])
# [1] "UTF-8"
И если вы передаете данные на устройство или в программу, говорящую на языке UTF-8, они должны отображаться корректно. Например, использование данных в качестве меток в команде plot
должно работать.
plot.new()
text(0.5, seq(0, 1, along.with = x[, 1]), x[, 1])
x = read.csv('graph1.csv', encoding = 'UTF-8', stringsAsFactors = TRUE)
. Я получу вывод, как здесь, кодируя не настоящие данные.
write.csv(network, file = "network.csv",row.names=FALSE)
после network=read.csv("graph1.csv", encoding="UTF-8", header=TRUE)
, и результат: "X.U.FEFF.node1","node2","weight" "<U+0648><U+0631><U+0642>800*750*6","<U+0648><U+0631><U+0642> 1350*1230*6mm",0.600000024 "<U+0648><U+0631><U+0642>900*1200*6","<U+0648><U+0631><U+0642> 1350*1230*6mm",0.600000024
Похожие вопросы
Связанные вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат полностью. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.