【发布时间】: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 <- race$caucasian + race$nativeamerican时,我收到错误“二进制运算符的非数字参数”。 -
@Manuel 不知何故,您将列表存储为 data.frame 元素。就像
x=data.frame(a=1);x$b=list(1:2);as.numeric(x$b)。会不会是csv文件格式错误? -
嗨@cryo111,我们设法解决了它。感谢您的输入:)