2012-09-23 70 views
1

假設我在R中導入csv文件以創建R數據集。現在這個文件具有數字,字符,數據&百分比值。如何確保我要導入的數據具有與原始文件相同的數據格式。在R中格式化數據

在SAS中,我們通常會在導入時對數據進行格式化。這裏的例子

data test ; 
      infile "c:\mydocument\raw.csv" 
      delimiter = ',' MISSOVER DSD lrecl=32767 
      firstobs=2 ; 

      input 
       varA   
       varB   : $50. 
       varC  : date9. 
       varD  : Percent5.2 
       varE  : $20. 
; 
run; 

在R中有沒有任何選項可以做同樣的動作?如果有人能給我一些參考資料,那會很棒!

實施例基於以下的答案:

Local<-read.csv("C:\\Users\\Raw.csv",colClasses = c("character","character","Date","character","character","character","character","character","character","character","numeric","numeric", "numeric","numeric"),row.names=1) 

我使用了基於達誠的例如下面的代碼。但是我收到以下錯誤。你能否告訴我爲什麼會出現這個錯誤?你一直很有幫助。

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : 
    scan() expected 'a real', got '.' 

謝謝。 RGDS。

+1

也許'.'用於NA ...但是,這很難告訴我們,因爲您的示例不可重現。 –

+0

感謝保羅的評論。我有 」。」在我的數據。所以這個錯誤已經被處理了。但是另一個錯誤即將到來。 「charToDate(x)中的錯誤: 字符串不是標準的明確格式」。我想我必須自己照顧它。 – Beta

+0

或者如果你不成功,請提出另一個問題,最好包括一個可重複的例子。我還添加了我的評論作爲答案。 –

回答

4

read.csv的colClasses參數是你想要的。從?read.csv

colClasses: character. A vector of classes to be assumed for the 
      columns. Recycled as necessary, or if the character vector 
      is named, unspecified values are taken to be ‘NA’. 

      Possible values are ‘NA’ (the default, when ‘type.convert’ is 
      used), ‘"NULL"’ (when the column is skipped), one of the 
      atomic vector classes (logical, integer, numeric, complex, 
      character, raw), or ‘"factor"’, ‘"Date"’ or ‘"POSIXct"’. 
      Otherwise there needs to be an ‘as’ method (from package 
      ‘methods’) for conversion from ‘"character"’ to the specified 
      formal class. 

      Note that ‘colClasses’ is specified per column (not per 
      variable) and so includes the column of row names (if any). 

一些示例使用

dat <- data.frame(num = 1:4, ch = letters[1:4]) 
write.csv(dat, file = "test.csv") 
read.csv("test.csv", 
      colClasses = c(NA, "numeric", "character"), 
      row.names = 1) 
# num ch 
#1 1 a 
#2 2 b 
#3 3 c 
#4 4 d 
out <- read.csv("test.csv", 
       colClasses = c(NA, "numeric", "character"), 
       row.names = 1) 
str(out) 
#'data.frame': 4 obs. of 2 variables: 
# $ num: num 1 2 3 4 
# $ ch : chr "a" "b" "c" "d" 
+0

回答。沒有什麼更多的補充說... –

1

關於你的第二個錯誤信息,什麼是可能發生的是,.作爲一個特殊的字符,可能意在顯示哪裏有哪裏NA的在數據集中。您可以使用na.strings參數告訴read.csv哪些字符串被視爲NA。