读取CSV数据时如何避免R中的因素

时间:2019-05-10 09:56:30

标签: r csv dataframe

我在csv文件中有数据。当我阅读它时,这些列处于因子水平,因此无法进行任何计算。

我用过 as.numeric(df$variablename),但它为变量呈现了完全不同的数据集。

original data in the variable: 2961,488,632,
   as.numeric output: 1,8,16

2 个答案:

答案 0 :(得分:3)

使用read.table读取数据时,您可以

  • 指定如何分隔数据sep =
  • 小数点是dec =
  • NA字符看起来像na.strings =
  • 您不想将字符串转换为因子stringsAsFactors = F

在您的情况下,您可以使用类似以下内容的

read.table("mycsv.csv", header = T, sep = ",", dec = ".", stringsAsFactors = F,
            na.strings = c("", "-"))

答案 1 :(得分:2)

除了Cettt的回答,还有colClasses

如果您预先知道csv文件具有的列的数据类型,则可以指定此类型。这使R不再“猜测”数据类型是什么,并让您知道什么时候不正确,而不是确定它必须是字符串。例如如果您的4列csv文件包含“文本”,“因子”,“整数”和“数字”列,则可以使用

read.table("mycsv.csv", header = T, sep = ",", dec = ".", 
    colClasses=c("character", "factor", "integer", "numeric"))

编辑后添加:

正如gersht所指出的,该问题很可能是数字栏中的一些非数字。通常,这可以是值NA的编码方式。指定colClasses会使R在遇到任何这样的“非数字或NA”值时发出错误消息,因此您可以轻松地看到问题。如果它是NA的非默认编码,请使用参数na.strings = c("NA", "YOUR NA VALUE")。如果这是另一个问题,则可能必须在导入之前修复文件。例如:

read.table(sep=",", 
           colClasses=c("character", "numeric"), 
           text="
           cat,11
           canary,12
           dog,1O")  # NB not a 10; it's a 1 and a capital-oh.

给予

  

扫描错误(文件=文件,什么=什么,九月=九月,引用=引用,十二月=十二月,     scan()预期为“真实”,为“ 1O”