2012-09-23 74 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。