为什么R读取数字数据作为字符?

时间:2014-05-13 15:05:24

标签: r

我试图加载包含整数和浮点数据的文件。我不知道为什么R会将其中一列读作字符字段。

 > df <- read.table( 'C:\\temp\\test.tab' , 
 +                   sep = '\t' , header = TRUE , stringsAsFactors = FALSE , dec="." )
 > str(df)
 'data.frame':  7 obs. of  5 variables:
  $ A: int  0 0 0 0 1 0 0
  $ B: int  1431 2097 2712 24821 27359 41165 49221
  $ C: int  0 0 0 0 0 0 0
  $ D: chr  "7" "26.950000762939453" "57.95000076293945" "21" ...
  $ E: int  1 2 3 4 5 6 7

文件内容:

 A  B   C   D   E
 0  1431    0   7   1
 0  2097    0   26.950000762939453  2
 0  2712    0   57.95000076293945   3
 0  24821   0   21  4
 1  27359   0   57.900001525878906  5
 0  41165   0   33.95000076293945   6
 0  49221   0   28.950000762939453  7

enter image description here

 > R.version
           _                           
 platform       x86_64-w64-mingw32          
 arch           x86_64                      
 os             mingw32                     
 system         x86_64, mingw32             
 status                                     
 major          3                           
 minor          1.0                         
 year           2014                        
 month          04                          
 day            10                          
 svn rev        65387                       
 language       R                           
 version.string R version 3.1.0 (2014-04-10)
 nickname       Spring Dance 

1 个答案:

答案 0 :(得分:11)

这可能值得一个我们可以指出的真实答案,所以.......

{3.1}中type.convert的行为被改变了(并且,如下所述,将在很大程度上恢复到R 3.1.1中3.1.0之前的行为):

  

从R 3.1.0开始,将输入转换为数字或复数   导致精度损失,它们作为字符串返回(as.is =   TRUE)或因素。

这在r-devel邮件列表中引起了相当重要的骚动。相关(和长)线程的开头是here

正如Ben上面提到的,该讨论的结果之一是在后续版本的开发版本中默认行为为restored

如果您知道哪些列会受到影响,您可以在短期内使用colClasses。否则,您必须修改代码以检查read.table的结果并自行转换,我猜。