Saya memiliki file CSV (24.1 MB) yang tidak dapat saya baca sepenuhnya di sesi R. Ketika saya membuka file dalam program spreadsheet saya bisa melihat 112.544 baris. Ketika saya membacanya menjadi R dengan read.csv
saya hanya mendapatkan 56.952 baris dan peringatan ini:
cit <- read.csv("citations.CSV", row.names = NULL,
comment.char = "", header = TRUE,
stringsAsFactors = FALSE,
colClasses= "character", encoding= "utf-8")
Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
EOF within quoted string
Saya dapat membaca seluruh file menjadi R dengan readLines
:
rl <- readLines(file("citations.CSV", encoding = "utf-8"))
length(rl)
[1] 112545
Tapi saya tidak bisa mendapatkan ini kembali ke R sebagai tabel (via read.csv
):
write.table(rl, "rl.txt", quote = FALSE, row.names = FALSE)
rl_in <- read.csv("rl.txt", skip = 1, row.names = NULL)
Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
EOF within quoted string
Bagaimana saya bisa menyelesaikan atau menyelesaikan pesan EOF ini (yang tampaknya lebih merupakan kesalahan daripada peringatan) untuk memasukkan seluruh file ke dalam R
sesi saya ?
Saya memiliki masalah yang sama dengan metode lain membaca file CSV:
require(sqldf)
cit_sql <- read.csv.sql("citations.CSV", sql = "select * from file")
require(data.table)
cit_dt <- fread("citations.CSV")
require(ff)
cit_ff <- read.csv.ffdf(file="citations.CSV")
Inilah sesi saya Info ()
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] tools tcltk stats graphics grDevices utils datasets methods base
other attached packages:
[1] ff_2.2-11 bit_1.1-10 data.table_1.8.8 sqldf_0.4-6.4
[5] RSQLite.extfuns_0.0.1 RSQLite_0.11.4 chron_2.3-43 gsubfn_0.6-5
[9] proto_0.3-10 DBI_0.2-7
sumber
fread
bekerja dalam situasi ini? Saya lebih suka itu karena jauh lebih cepat daripadaread.csv
. Tapifread
sepertinya tidak mengambilquote
argumen ..fread
tidak bermain bagus dengan kutipan yang tertanam secara umum, tapi saya yakin akan segera ada solusinya. stackoverflow.com/questions/16094025/…write.csv()
dan mendapatkan kembali dengan 403read.csv()
. Menambahkan kutipan = "" memberi saya hingga 410 baris.read.table()
tidak lebih baik. Saya ingin tahu apa lagi yang bisa dicoba ...Saya pengguna R ish baru dan berpikir saya akan memposting ini jika itu membantu orang lain. Saya mencoba membaca dalam data dari file teks (dipisahkan dengan koma) yang mencakup beberapa karakter Spanyol dan butuh selamanya untuk mengetahuinya. Saya tahu saya perlu menggunakan pengkodean UTF-8, mengatur argumen header ke TRUE, dan bahwa saya perlu mengatur argumen sep untuk ",", tapi kemudian saya masih mendapat hang up. Setelah membaca posting ini saya mencoba mengatur fill arg ke TRUE, tetapi kemudian mendapatkan "EOF dalam string yang dikutip" yang sama yang saya dapat perbaiki dengan cara yang sama seperti di atas. Read.table saya yang sukses terlihat seperti ini:
target <- read.table("target2.txt", fill=TRUE, header=TRUE, quote="", sep=",", encoding="UTF-8")
Hasilnya memiliki karakter bahasa Spanyol dan redup yang sama dengan yang saya miliki pada awalnya, jadi saya menyebutnya sukses! Terima kasih semuanya!
sumber
Di bagian bantuan R, seperti yang ditunjukkan di atas, cukup nonaktifkan mengutip sama sekali, dengan hanya menambahkan:
ke read.csv () bekerja untuk saya.
Kesalahan, "EOF dalam string yang dikutip", terjadi dengan:
Dan file yang dibaca hilang 6.619 baris. Tetapi dengan menonaktifkan kutipan
Bekerja tanpa kesalahan dan semua baris berhasil dibaca.
sumber
Saya juga mengalami masalah ini, dan dapat mengatasi kesalahan EOF serupa menggunakan:
Perhatikan bahwa parameter pemisah didefinisikan dalam yang lebih umum
read.table()
.sumber
Sebenarnya, menggunakan
read.csv()
untuk membaca file dengan konten teks bukan ide yang baik, menonaktifkan kutipan karenaquote=""
hanya menetapkan solusi sementara, itu hanya bekerja dengan tanda kutip terpisah. Ada alasan lain yang akan menyebabkan peringatan, seperti beberapa karakter khusus.Solusi permanen (menggunakan
read.csv()
), mencari tahu apa karakter khusus itu dan menggunakan ekspresi reguler untuk menghilangkannya adalah sebuah ide.Pernahkah Anda berpikir untuk menginstal paket
{data.table}
dan menggunakannyafread()
untuk membaca file. ini jauh lebih cepat dan tidak akan mengganggu Anda dengan peringatan EOF ini. Perhatikan bahwa file yang dimuatnya akan disimpan sebagai objek data.table tetapi bukan objek data.frame. Kelas data.tabel memiliki banyak fitur bagus, tetapi bagaimanapun, Anda dapat mengubahnya menggunakanas.data.frame()
jika diperlukan.sumber
Saya memiliki masalah yang sama: EOF -warning dan hanya sebagian data yang dimuat dengan read.csv (). Saya mencoba tanda kutip = "", tetapi itu hanya menghapus peringatan-EOF.
Tetapi melihat baris pertama yang tidak memuat, saya menemukan bahwa ada karakter khusus, panah → (nilai heksadesimal 0x1A) di salah satu sel. Setelah menghapus panah saya mendapatkan data untuk dimuat secara normal.
sumber
Saya juga punya masalah serupa. Tetapi dalam kasus saya, penyebab masalah adalah karena adanya tanda kutip (yaitu tanda kutip tunggal) dalam beberapa nilai teks. Ini sering terjadi ketika bekerja dengan data termasuk teks dalam bahasa Prancis, misalnya «L'autre jour».
Jadi, solusinya adalah hanya menyesuaikan pengaturan default argumen kutipan untuk mengecualikan simbol «'», dan dengan demikian, menggunakan kutipan = "\" " (yaitu hanya tanda kutip ganda ), semuanya bekerja dengan baik.
Saya harap itu dapat membantu beberapa dari Anda. Bersulang.
sumber
The readr paket akan memperbaiki masalah ini.
sumber