2015-11-29 15 views
5

Đây là câu hỏi noob, nhưng tôi phát điên lên. Tôi có một vector ký tự có tên bars.list mà tôi tải xuống từ FTP Sever. Các vector trông như thế này:Chuyển chuỗi dài thành data.frame

"\"\",\"times\",\"open\",\"high\",\"low\",\"close\",\"numEvents\",\"volume\"\r\n\"1\",2015-05-18 06:50:00,23.98,23.98,23.5,23.77,421,0\r\n\"2\",2015-05-18 07:50:00,23.77,23.9,23.34,23.6,720,0\r\n\"3\",2015-05-18 08:50:00,23.6,23.6,23.32,23.42,720,0\r\n\"4\",2015-05-18 09:50:00,23.44,23.91,23.43,23.66,720,0\r\n\"5\",2015-05-18 10:50:00,23.67,24.06,23.59,24.02,720,0\r\n\"6\",2015-05-18 11:50:00,24.02,24.04,23.32,23.33,720,0\r\n\"7\",2015-05-18 12:50:00,23.33,23.42,22.74,22.81,720,0\r\n\"8\",2015-05-18 13:50:00,22.79,22.92,22.49,22.69,720,0\r\n\"9\",2015-05-18 14:50:00,22.69,22.7,22.14,22.14,481,0\r\n\"10\",2015-05-19 06:50:00,21.09,21.49,20.82,21.47,421,0\r\n\"11\",2015-05-19 07:50:00,21.48,21.68,21.46,21.51,720,0\r\n\"12\",2015-05-19 08:50:00,21.51,21.93,21.45,21.92,720,0\r\n\"13\",2015-05-19 09:50:00,21.92,21.92,21.55,21.55,720,0\r\n\" 

tôi cần phải có vector này chuyển đổi sang định dạng có thể sử dụng nhưng

> read.table(bars.list, header = TRUE, sep = ",", quote = "", dec = ".") 
Error in file(file, "rt") : cannot open the connection 
In addition: Warning message: 
In file(file, "rt") : 
    cannot open file '"","times","open","high","low","close","numEvents","volume" 
"1",2015-05-18 06:50:00,23.98,23.98,23.5,23.77,421,0 
"2",2015-05-18 07:50:00,23.77,23.9,23.34,23.6,720,0 
"3",2015-05-18 08:50:00,23.6,23.6,23.32,23.42,720,0 
"4",2015-05-18 09:50:00,23.44,23.91,23.43,23.66,720,0 

Nó không phải là rõ ràng với tôi lý do tại sao R nói với tôi rằng một số kết nối không thể mở được như đối tượng đã được dán làm đối số cho hàm. Đầu ra R Hiển thị cho tôi một dấu hiệu cảnh báo đã khá gần với những gì tôi cần ...

Trả lời

4

Dưới đây là hai tùy chọn. Đầu tiên cung cấp một sửa chữa cho mã hiện tại của bạn, và thứ hai nhìn vào một lựa chọn đơn giản hơn hiệu quả hơn.

Tùy chọn 1: Đối số đầu tiên trong read.table()file. Bạn đang đọc từ một véc tơ không phải từ một tệp, do đó bạn cần sử dụng đối số text, với text = bars.list.

Ngoài ra, chúng ta có thể thoát khỏi tất cả các dấu ngoặc kép với gsub() đầu tiên và sau đó sử dụng read.csv() thay vì read.table() từ header = TRUEsep = "," là giá trị mặc định đó.

read.csv(text = gsub("\"", "", bars.list), row.names = 1) 
#     times open high low close numEvents volume 
# 1 2015-05-18 06:50:00 23.98 23.98 23.50 23.77  421  0 
# 2 2015-05-18 07:50:00 23.77 23.90 23.34 23.60  720  0 
# 3 2015-05-18 08:50:00 23.60 23.60 23.32 23.42  720  0 
# 4 2015-05-18 09:50:00 23.44 23.91 23.43 23.66  720  0 
# 5 2015-05-18 10:50:00 23.67 24.06 23.59 24.02  720  0 
# 6 2015-05-18 11:50:00 24.02 24.04 23.32 23.33  720  0 
# 7 2015-05-18 12:50:00 23.33 23.42 22.74 22.81  720  0 
# 8 2015-05-18 13:50:00 22.79 22.92 22.49 22.69  720  0 
# 9 2015-05-18 14:50:00 22.69 22.70 22.14 22.14  481  0 
# 10 2015-05-19 06:50:00 21.09 21.49 20.82 21.47  421  0 
# 11 2015-05-19 07:50:00 21.48 21.68 21.46 21.51  720  0 
# 12 2015-05-19 08:50:00 21.51 21.93 21.45 21.92  720  0 
# 13 2015-05-19 09:50:00 21.92 21.92 21.55 21.55  720  0 

Đối với tôi, điều này làm việc tốt hơn sử dụng đối số quote trong read.csv().

Tùy chọn 2:fread() từ gói data.table cũng hoạt động tốt. Nó nhanh hơn và mã sạch hơn. Không cần sử dụng gsub() cùng với nó. Chúng tôi có thể đặt trực tiếp bars.list và thả cột đầu tiên.

data.table::fread(bars.list, drop = 1) 

Bây giờ, bạn sẽ nhận được cảnh báo với phương pháp này do báo giá cuối cùng \". Bạn có thể sống với nó hoặc nhận được kết quả ít cảnh báo bằng cách xóa dấu trích dẫn cuối cùng.

data.table::fread(sub("\"$", "", bars.list), drop = 1) 

dữ liệu:

bars.list <- "\"\",\"times\",\"open\",\"high\",\"low\",\"close\",\"numEvents\",\"volume\"\r\n\"1\",2015-05-18 06:50:00,23.98,23.98,23.5,23.77,421,0\r\n\"2\",2015-05-18 07:50:00,23.77,23.9,23.34,23.6,720,0\r\n\"3\",2015-05-18 08:50:00,23.6,23.6,23.32,23.42,720,0\r\n\"4\",2015-05-18 09:50:00,23.44,23.91,23.43,23.66,720,0\r\n\"5\",2015-05-18 10:50:00,23.67,24.06,23.59,24.02,720,0\r\n\"6\",2015-05-18 11:50:00,24.02,24.04,23.32,23.33,720,0\r\n\"7\",2015-05-18 12:50:00,23.33,23.42,22.74,22.81,720,0\r\n\"8\",2015-05-18 13:50:00,22.79,22.92,22.49,22.69,720,0\r\n\"9\",2015-05-18 14:50:00,22.69,22.7,22.14,22.14,481,0\r\n\"10\",2015-05-19 06:50:00,21.09,21.49,20.82,21.47,421,0\r\n\"11\",2015-05-19 07:50:00,21.48,21.68,21.46,21.51,720,0\r\n\"12\",2015-05-19 08:50:00,21.51,21.93,21.45,21.92,720,0\r\n\"13\",2015-05-19 09:50:00,21.92,21.92,21.55,21.55,720,0\r\n\"" 
Các vấn đề liên quan