Adakah yang bisa tolong beri tahu saya cara membaca hanya 6 bulan pertama (7 kolom) untuk setiap tahun dari data di bawah ini, misalnya dengan menggunakan read.table()
?
Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2009 -41 -27 -25 -31 -31 -39 -25 -15 -30 -27 -21 -25
2010 -41 -27 -25 -31 -31 -39 -25 -15 -30 -27 -21 -25
2011 -21 -27 -2 -6 -10 -32 -13 -12 -27 -30 -38 -29
NULL
kelas kolom dalam jawabannya .Jawaban:
Katakanlah data dalam file
data.txt
, Anda dapat menggunakancolClasses
argumenread.table()
untuk melewati kolom. Di sini, data dalam 7 kolom pertama adalah"integer"
dan kami mengatur 6 kolom yang tersisa untuk"NULL"
menunjukkan bahwa mereka harus dilewatiUbah
"integer"
ke salah satu jenis yang diterima sebagai terperinci?read.table
tergantung pada jenis data yang sebenarnya.data.txt
terlihat seperti ini:dan dibuat dengan menggunakan
di mana
dat
adalahJika jumlah kolom tidak diketahui sebelumnya, fungsi utilitas
count.fields
akan membaca file dan menghitung jumlah kolom di setiap baris.sumber
nrows
. Kemudian tentukan berapa banyak kolom yang ada gunakanncol()
, atau bagaimana pun Anda ingin menghitung jumlah kolom untuk dibaca / abaikan. Kemudian baca file lengkap menggunakan info ini.count.fields()
yang mengotomatiskan proses yang saya sarankan di komentar.count.fields()
koneksi teks, jadi, baca beberapa subset dari baris yang digunakantxt <- readLines(....)
, kemudian buat koneksi ke baris read incon <- textConnection(txt)
, lalu lakukancount.fields(txt)
. Pastikan untuk menggunakanskip
dicount.fields()
melewatkan baris header jika ada satu; Anda tidak dapat melewati baris dalam file menggunakanreadLines()
.Untuk membaca kumpulan kolom tertentu dari dataset Anda, ada beberapa opsi lain:
1) Dengan
fread
daridata.table
-paket:Anda dapat menentukan kolom yang diinginkan dengan
select
parameter darifread
daridata.table
paket. Anda dapat menentukan kolom dengan vektor nama kolom atau nomor kolom.Untuk dataset contoh:
Atau, Anda dapat menggunakan
drop
parameter untuk menunjukkan kolom mana yang tidak boleh dibaca:Semua menghasilkan:
UPDATE: Ketika Anda tidak ingin
fread
mengembalikan data.table , gunakandata.table = FALSE
parameter -m, misalnya:fread("data.txt", select = c(1:7), data.table = FALSE)
2) Dengan
read.csv.sql
darisqldf
-paket:Alternatif lain adalah
read.csv.sql
fungsi darisqldf
paket:3) Dengan -fungsi
read_*
darireadr
-paket:Dari dokumentasi penjelasan untuk karakter yang digunakan dengan
col_types
:sumber
fread
Namun, tidak mendukung file terkompresi. File besar biasanya terkompresi.fread
. Yang perlu diperhatikan adalahfread
kemungkinan besar akan membaca file yang tidak dikompresi lebih cepat daripadaread.table
membaca file yang dikompresi. Lihat di sini untuk contoh .read.table
tidak akan menyelamatkan Anda. Dalam hal ini, Anda mungkin ingin melihatff
-paket.fread
untuk membaca file yang dikompresi besar seperti ini:fread("gunzip -c data.txt.gz", drop = c(8:13))
.Anda juga bisa menggunakan JDBC untuk mencapai ini. Mari kita membuat file csv sampel.
Unduh dan simpan driver CSV JDBC dari tautan ini: http://sourceforge.net/projects/csvjdbc/files/latest/download
sumber
Anda melakukannya seperti ini:
sumber