【问题标题】:Read.csv outputs factors instead of numeric valuesRead.csv 输出因子而不是数值
【发布时间】:2015-10-15 19:31:05
【问题描述】:

我正在编写一个 R 代码,它会自动从不同的 .csv 文件中提取大量数据并 “编译”长面板数据格式的数据。下面是人口普查变量“Race”的代码的 sn-p:

    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”中的 10 个文件中的每一个(每个文件都有一年 美国 50 个州的值,我们有 2005-2014 年的 10 年数据,因此 10 个文件)提取必要的列(所有文件都来自 census.gov 网站,因此设置相同),我们 手动输入,然后一起编译(所以我们从 10 个包含 10 年数据的文件到只有 1 个文件)。

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

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

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

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

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]) 时,它返回“字符”。如果我继续使用 as.numeric() 它会返回错误“错误:(列表)对象不能被强制输入'double'”

非常感谢任何帮助!

【问题讨论】:

  • 这和 Python 有什么关系?
  • 试试read.csv(files.race[i], header = TRUE, sep = ",",stringsAsFactors=FALSE)
  • @cryo111 感谢您的回复。这是我事先在论坛上找到的选项之一;我很抱歉我不够清楚。这可以将数据放入数据框中,但是当我尝试添加两列 c &lt;- race$caucasian + race$nativeamerican 时,我收到错误“二进制运算符的非数字参数”。
  • @Manuel 不知何故,您将列表存储为 data.frame 元素。就像x=data.frame(a=1);x$b=list(1:2);as.numeric(x$b)。会不会是csv文件格式错误?
  • 嗨@cryo111,我们设法解决了它。感谢您的输入:)

标签: r csv


【解决方案1】:

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

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

我们所做的是 2 个 read.csv:第一个用于数据,第二个用于标题。然后我们将两者结合起来,效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多