Saya membaca data dari banyak pdf yang berantakan. Hasil akhirnya, untuk setiap pdf, adalah kerangka data R, dengan satu variabel, yang saya sebut teks. Setiap baris kerangka data berisi representasi tekstual dari satu baris tabel pdf asli. Elemen dalam setiap baris dipisahkan dengan '|' karakter. Salah satunya terlihat seperti ini: -

Jumlah total kasus terkonfirmasi|965
dan
Jumlah kasus baru 22 Maret|129
Jumlah total rawat inap|277|28,7
Jumlah total yang dirawat di ICU|36|3.7
Jumlah kematian|6
Rasio Kematian Kasus (CFR )|0,6
Jumlah total wabah atau cluster|44
Jumlah total kasus yang terkait dengan kluster|243|25,2 Jumlah total kasus yang diimpor|201|20.8
Jumlah kasus di HCW|247|25.6
Usia rata-rata (tahun)|45
Rentang usia (tahun)|0-95

Dan itu dapat dibuat ulang dari ini: -

structure(list(Text = c("Total number of confirmed cases|965", 
"nd", "Number of new cases 22 March|129", "Total number hospitalised|277|28.7", 
"Total number admitted to ICU|36|3.7", "Total number of deaths|6", 
"Case Fatality Ratio (CFR )|0.6", "Total number of outbreaks or clusters|44", 
"Total number cases associated with clusters|243|25.2", "Total number of imported cases|201|20.8", 
"Number of cases in HCW|247|25.6", "Median age (years)|45", "Age range (years)|0-95"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-13L))

Saat ini, saya menulis ini menggunakan write_csv(), dan membacanya kembali menggunakan read_delim() ini :-

write_csv(HPSC,'data/temp.csv')

HPSC <- read_delim('data/temp.csv', delim='|',
                 skip=1, na = c('-'),
                 col_names = c('Characteristic','Number','Pct')) %>%
mutate(Date = dmy('08.04.2020')) # In the real version, the date comes from elsewhere.

Ini rumit, tetapi tidak terlalu sulit untuk menyatukan banyak hal ini, dan mendapatkan hasil akhir saya - pada dasarnya kerangka data dengan satu baris per pdf.

Jadi, ini semua berfungsi dengan baik. Saya memerlukan fungsionalitas penuh read_delim karena jika tidak, saya harus menulis kode saya sendiri untuk mengidentifikasi pemisah, melewati baris, dan untuk menangani fakta bahwa ada berbagai jumlah item di setiap baris. Saya cukup senang dengan apa yang saya lakukan, tetapi saya agak terkejut bahwa saya tidak bisa hanya memberi satu kerangka data kolom ke read_delim, dan membuatnya melakukan tugasnya.

Apakah ada cara untuk melakukan ini?

r
0
astaines 11 April 2020, 16:43

1 menjawab

Jawaban Terbaik

Intuisi Anda benar--Anda dapat meneruskan kolom Anda ke read_delim tanpa menyimpannya sebagai CSV terlebih dahulu, tetapi Anda harus meneruskannya sebagai vektor, bukan tabel. Menggunakan struktur data Anda, saya yakin saya telah menghasilkan fungsionalitas yang Anda minta di sini:

x = structure(list(Text = c("Total number of confirmed cases|965", 
                            "nd", "Number of new cases 22 March|129", "Total number hospitalised|277|28.7", 
                            "Total number admitted to ICU|36|3.7", "Total number of deaths|6", 
                            "Case Fatality Ratio (CFR )|0.6", "Total number of outbreaks or clusters|44", 
                            "Total number cases associated with clusters|243|25.2", "Total number of imported cases|201|20.8", 
                            "Number of cases in HCW|247|25.6", "Median age (years)|45", "Age range (years)|0-95"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
                                                            -13L))

read_delim(x$Text, delim='|',
           skip=1, na = c('-'),
           col_names = c('Characteristic','Number','Pct')) %>%
  mutate(Date = dmy('08.04.2020'))

Lihat bagaimana kolom 'Teks' dipilih dari objek.

1
Jake 11 April 2020, 16:21