Read.csv输出因子而不是数值

时间:2015-10-15 19:31:05

标签: r csv

我正在编写一个R代码,可以自动从不同的.csv文件中提取大量数据 以长面板数据格式“编译”数据。以下是人口普查变量“种族”代码的片段:

    for (i in 1:10) {
  dat.race <- read.csv(files.race[i], header = TRUE, sep = ",")
  dat.race <- cbind(2004 + i, dat.race[-1, c(2:4, 6, 8, 16)])  #Create a column with the year (each file corresponds to a diff. year)
  if (i == 1) {
    race <- dat.race
  } else {
    race <- rbind(race, dat.race[, names(race)])
  }
 }

代码的目的是进入文件夹,打开文件夹“Race”中的每个文件(每个文件有一年) 50美国国家的价值,我们有2005年至2014年10年的数据,因此10个文件提取必要的列(所有文件来自census.gov网站,因此设置是相同的),我们 手动输入,然后将它们全部编译在一起(所以我们将10个文件从10年的数据转换为1个文件)。

这适用于所有变量。但后来我们达到了可变人口密度。既然我们没找到 人口密度我们认为我们会得到人口变量,然后是州面积变量并做一个简单的 在R.然后我们发现read.csv命令已将逗号分隔值提取到因子中, 我们不能用于数学运算。

我尝试了as.numeric()命令,但它返回因子的数量而不是原始数字(不确定这是否完全合理)。我也试过了 其他用户发布的一些解决方案无济于事。

有没有人知道如何制作它以便上面的代码为我们提供了我们可以使用的数值 做手术,而不是手工做?

更新:在使用cryo111的建议后,我现在有一个7列520行的数据框(仅用于变量竞赛),数据组织如下。

year GEO.id2 GEO.label total white black other
2005 01      Alabama   ....  ....  ....  ....
2005 02      Alaska    ....  ....  ....  ....
2005 04      Arizona   ....  ....  ....  ....
... ....     ....      ....  ....  ....  ....
2005 56      Wyoming   ....  ....  ....  ....

然后,我们的想法是在R代码中运行,以使用不同的值(白色/总等)来计算变量,例如“阿拉巴马州的人口百分比等等”。

不幸的是,当我查看组件(race [5,1])时,它会返回“character”。如果我继续使用as.numeric(),则返回错误“错误:(列表)对象无法强制键入'double'”

任何帮助都非常感谢!

1 个答案:

答案 0 :(得分:0)

我们设法解决了这个问题。显然,从原始.csv数据文件中,read.csv选项之一是确定要跳过的行数以及标头是否存在。

如果我们使用header = TRUE命令,它会将标头保留为一个因子。这可能就是为什么我们不能强迫它通过as.numeric。

我们做的是2 read.csv:第一个用于数据,第二个用于标头。然后我们将它们结合起来并且有效。