【发布时间】:2015-12-15 20:54:31
【问题描述】:
我正在从多个 CSV 文件中提取数据并尝试将它们组合成一个数据框。源数据的格式很奇怪,因此我必须从源中的特定位置提取数据,然后将它们以逻辑模式放置在结果数据框中。
我创建了两个长度相等的向量并从我的源文件中提取数据。最终结果是我得到了两个长度为 3 的向量(如预期的那样),但我没有得到一个 3x2 数据框(对 2 个变量进行 3 个观察),而是得到一个 1x6 数据框(对 6 个变量进行 1 个观察) .
令我好奇的是,尽管 RStudio 认为它们都是“3 列表”,但当我在控制台中显示它们时,它们的显示方式却大不相同:
不起作用的源代码:
#set the working directory to where the data files are stored
setwd("/foo")
# identify how many data files are present
files = list.files("/foo")
# create vectors long enough to contain all the postal codes and income data
postalCodeData=vector(length=length(files))
medianIncomeData=vector(mode="character", length=length(files))
# loop through all the files, pulling data from rows 2 and 1585.
for(i in 1:length(files)) {
x = read.csv(files[i],skip=1,nrows= 1,header=F)
y = read.csv(files[i], skip = 1584, nrows = 1,header=F)
postalCodeData[i]=x
medianIncomeData[i]=y[2]
}
#create the data frame
Results=data.frame(postalCodeData,medianIncomeData)
#name the columns
names(Results)=c("FSA", "Median Income")
我的数据框最终看起来像这样:
有效工作的源代码:
setwd("/Users/Perry/Downloads/Postal Code Data/")
files = list.files("/Users/Perry/Downloads/Postal Code Data/")
postalCodeData=c("K0A","K0B","K0C")
medianIncomeData=c("10000","20000","30000")
Results=data.frame(postalCodeData,medianIncomeData)
names(Results)=c("FSA", "Median Income")
不幸的是,我无法明确指定值,因为我有数百个文件可以从中提取信息。任何关于如何纠正循环以获得所需结果的建议将不胜感激。
【问题讨论】:
-
这两个不是向量,它们是列表。请提供一些易于重现的输入数据,例如使用
dput。 -
感谢 iled,我支持您的改进。当我注释掉循环并直接为我的 postalCodeData 和 medianIncomeData 指定值时,我得到了预期的结果,因此循环的行为似乎不符合预期。
-
我想说的是
medianIncomeData和PostalCodeData,如第一张图片所示,它们是列表而不是向量,这就是你看到List of 3的原因。
标签: r