2015-05-13 22 views
9

NB: Theo hiểu biết tốt nhất của tôi, câu hỏi này không trùng lặp! Tất cả các questios/câu trả lời tôi tìm thấy là làm thế nào để loại bỏ các điểm từ dữ liệu đã có trong R hoặc làm thế nào để thay đổi dấu thập phân để một dấu phẩy khi tải nó.Cách thanh lịch nhất để tải csv với điểm là dấu tách hàng nghìn trong R

Tôi có một csv với các số như: 4.123,98. Vấn đề là do . đầu ra trở thành ma trận chuỗi ký tự khi tải với read.table, read.csv hoặc read.csv2. Thay đổi dec thành , không giúp ích gì.

Câu hỏi của tôi
là gì cách thanh lịch nhất để tải csv này để các con số trở thành ví dụ 4123.98 là số?

Trả lời

9
#some sample data 
write.csv(data.frame(a=c("1.234,56","1.234,56"), 
        b=c("1.234,56","1.234,56")), 
      "test.csv",row.names=FALSE,quote=TRUE) 

#define your own numeric class 
setClass('myNum') 
#define conversion 
setAs("character","myNum", function(from) as.numeric(gsub(",","\\.",gsub("\\.","",from)))) 

#read data with custom colClasses 
read_data=read.csv("test.csv",stringsAsFactors=FALSE,colClasses=c("myNum","myNum")) 
#let's try whether this is really a numeric 
read_data[1,1]*2 

#[1] 2469.12 
+0

BTW: Phỏng theo đây http://stackoverflow.com/ câu hỏi/13022299/chỉ định-ngày-định dạng-cho-colclasses-đối số-trong-đọc-bảng-đọc-csv – cryo111

2

Thay vì cố gắng khắc phục tất cả vào lúc tải, tôi sẽ tải dữ liệu vào R dưới dạng chuỗi, sau đó xử lý dữ liệu đó thành số.

Vì vậy, sau khi tải, đó là một cột của chuỗi như "4.123,98"

Sau đó làm một cái gì đó như:

number.string <- gsub("\\.", "", number.string) 
number.string <- gsub(",", "\\.", number.string) 
number <- as.numeric(number.string) 
Các vấn đề liên quan