Hôm nay tôi đã quyết định bắt đầu leo lên đường cong học tập dốc của R. Tôi đã dành một vài giờ và tôi quản lý để nhập dữ liệu của mình và thực hiện một vài điều cơ bản khác nhưng tôi gặp sự cố với kiểu dữ liệu: một cột chứa số thập phân được nhập dưới dạng số nguyên và chuyển đổi thành hai lần thay đổi giá trị .Sự cố khi nhập tệp csv/chuyển đổi từ số nguyên thành gấp đôi trong R
Khi cố gắng lấy tệp csv nhỏ để đặt ở đây làm ví dụ, tôi phát hiện ra rằng sự cố chỉ xảy ra khi tệp dữ liệu quá lớn (tệp gốc của tôi là ma trận 1048418 x 12, nhưng thậm chí chỉ có " "5000 hàng tôi có cùng một vấn đề. Khi tôi chỉ có 100, 1000 hoặc thậm chí 2000 hàng, cột được nhập chính xác là gấp đôi).
Here là tập dữ liệu nhỏ hơn (vẫn còn 500kb, nhưng một lần nữa, nếu tập dữ liệu nhỏ thì vấn đề không được nhân rộng). Mã này là
> ex <- read.csv("exampleshort.csv",header=TRUE)
> typeof(ex$RET)
[1] "integer"
Tại sao cột trả về được nhập dưới dạng số nguyên khi tệp lớn, khi rõ ràng là loại gấp đôi?
Điều tồi tệ nhất là nếu tôi cố gắng chuyển đổi nó sẽ tăng gấp đôi, các giá trị được thay đổi
> exdouble <- as.double(ex$RET)
> typeof(exdouble)
[1] "double"
> ex$RET[1:5]
[1] 0.005587 -0.005556 -0.005587 0.005618 -0.001862
2077 Levels: -0.000413 -0.000532 -0.001082 -0.001199 -0.0012 -0.001285 -0.001337 -0.001351 -0.001357 -0.001481 -0.001486 -0.001488 ... 0.309524
> exdouble[1:5]
[1] 1305 321 322 1307 41
Đây không phải là cột duy nhất được nhập khẩu sai, nhưng tôi đoán rằng nếu tôi tìm một giải pháp cho một cột, tôi có thể sắp xếp các cột khác. Dưới đây là một số thông tin hơn:
> sapply(ex,class)
PERMNO DATE COMNAM SICCD PRC RET RETX SHROUT VWRETD VWRETX EWRETD EWRETX
"integer" "integer" "factor" "integer" "factor" "factor" "factor" "integer" "numeric" "numeric" "numeric" "numeric"
Họ nên theo thứ tự: số nguyên, ngày tháng, chuỗi, số nguyên, đôi, gấp đôi, gấp đôi, số nguyên, đôi, gấp đôi, gấp đôi, gấp đôi (loại có lẽ là sai, nhưng hy vọng bạn sẽ hiểu ý tôi là gì)
@Xu Wang: nửa đầu sẽ không hoạt động.Cắt giảm xuống 5 nghìn lần quan sát đầu tiên, ít hơn 1% dữ liệu của tôi, đã tạo ra vấn đề ... – Vivi
xin lỗi vì tôi đã không hoàn thành nhận xét của mình vì tôi đã đọc và đọc trợ giúp 'read.csv'. Những gì tôi muốn nói là tôi nghĩ có lẽ có một số giá trị kỳ lạ mà nhầm lẫn với 'R'. Vì vậy, tôi nghĩ rằng đó không phải là một thực tế lớn hay nhỏ mà là tập dữ liệu lớn có một trong những ký tự hoặc giá trị khó hiểu đó. Điều đó có ý nghĩa? Nếu không, nó không quan trọng. Tôi nghĩ giải pháp là sử dụng đối số colClasses. –
@Xu Wang Tôi hiểu những gì bạn đang nói, nhưng tôi vẫn không hoàn toàn chắc chắn về cách giải quyết vấn đề của tôi. Làm cách nào để sử dụng đối số colClasses? Bạn có thể cho tôi một dòng lệnh để nhập tệp này một cách chính xác bằng cách sử dụng đối số colClasses không? – Vivi