![](/img/trans.png)
[英]Importing CSV data containing commas, thousand separators and trailing minus sign
[英]How to read .csv-data containing thousand separators and special handling of zeros (in R)?
Ubuntu 14.04 上的 R 版本 3.2.2
我正在嘗試讀取包含千位分隔符“,”的 R .csv 數據(兩列:“id”和“variable1”)。 到目前為止沒有問題。 我正在使用 read.csv2,數據如下所示:
> data <- read.csv2("data.csv", sep = ";", stringsAsFactors = FALSE, dec = ".")
> data[1000:1010, ]
id variable1
1 2,001
1,001 2,002
1,002 2,001
1,003 2,002
1,004 2,001
1,005 2,002
1,006 2,001
1,007 2,002
1,008 2,001
1,009 2,002
1,01 2,001
在那之后,我首先嘗試使用 gsub() 刪除逗號:
data[, c("id", "variable1")] <- sapply(data[, c("id", "variable1")],
function(x) {as.numeric(gsub("\\,","", as.character(x)))})
> data[1000:1010, ]
id variable1
1 2001
1001 2002
1002 2001
1003 2002
1004 2001
1005 2002
1006 2001
1007 2002
1008 2001
1009 2002
101 2001
我認為我的問題在第一個輸出中已經很明顯了,因為有千位分隔符,但是缺少“結束零”。 對於數據中的“id”變量(也在 .csv 數據中),數字“1000”僅顯示為“1”,而“1010”顯示為“1,01”。 當然,R 無法識別這一點。
所以我的問題是:有沒有辦法告訴 R 在讀取數據時(或者可能在那之后)每個數字在千位分隔符之后必須有三個數字,以便我有正確的數字? 數據應如下所示:
> data[1000:1010, ]
id variable1
1000 2001
1001 2002
1002 2001
1003 2002
1004 2001
1005 2002
1006 2001
1007 2002
1008 2001
1009 2002
1010 2001
編輯:謝謝大家的回答。 不幸的是,這些建議適用於這個示例,但不適用於我的數據,因為我認為我選擇了錯誤的示例行。 數據中的其他行可能如下所示:
id1 variable1
1 1 2,001
999 999 1,102
1000 1 2,001
1001 1,001 2,002
1002 1,002 2,001
當然,有兩倍的數字“1”。 第一個確實是“1”,但第二個應該是“1000”。 但現在我認為我無法用 R 解決我的問題。也許我需要更好地導出原始數據,因為問題也出現在 .csv 數據中。
刪除逗號后,您可以執行以下操作:
data$id <- data$id*(10^(4-nchar(data$id)))
如果 "," 是唯一的分隔符,即所有數字都是整數,您可以將csv2
(或read.csv
)的dec
參數設置為 "," 並乘以 1000:
data <- read.csv2(
text = "id ; variable1
1 ; 2,001
1,008 ; 2,001
1,009 ; 2,002
1,01 ; 2,001
1,3 ; 2,0",
sep = ";",
stringsAsFactors = FALSE,
header = TRUE,
dec = "," )
.
> 1000*data
id variable1
1 1000 2001
2 1008 2001
3 1009 2002
4 1010 2001
5 1300 2000
>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.