2016-01-20 58 views
0

如果这是一个微不足道的问题,请道歉。我看到其他人喜欢它,如:How can I turn a part of the filename into a variable when reading multiple text files into R?,但我似乎仍然有一些麻烦...R:如何在文件名的数据帧末尾添加多个变量

我已经给50000.txt文件。每个文件包含一个具有12个变量(列数)的单个观察值(一行数据)。每个.txt文件的名称都相当常见。具体来说,每个.txt文件末尾都有一个代码,用于指示三维观察的类型。这个代码的例子是'VL-VL-NE'或'VL-M-N'或'H-H-L'(不包括撇号)。因此,文件名的例子可以是'I-love-using-R-20_01_2016-VL-VL-NE.txt'。

我的问题是,当我导入到R中时,我想在实际向量本身的.txt文件的末尾包含此代码,即,我想在其末尾添加三个变量(列)表格对应于文件名末尾的三部分代码。

任何帮助将不胜感激。

+1

我假设你有一些导入文本文件的代码?如果你有这个,它应该是一个简单的'regex'来获得文件名中的代码 – tospig

回答

0

因为每个文件中的列数完全相同,为什么不使用循环查找特定目录中的所有.txt文件,将它们导入到R中?

df <- c() 
for (x in list.files(pattern="*.txt")) { 
    u<-read.csv(x, skip=6) 
    u$Label = factor(x) #A column that is the filename 
    df <- rbind(df,u) 
} 

您会注意到文件名本身就成为一列。一旦一切进入R,使用regex函数从文件名称列(df$Label)中提取所需的确切元素应该相当容易。

+1

如果你的'df'变得足够大,你会遇到性能问题。如果在这种情况下事先知道行数,则预先分配会更好,即,创建具有所需尺寸的空“_df”。 – JackeJR

+0

我并不反对,但我不确定要完成此操作的等效方法。 – boshek

+0

它应该很简单。所以data.frame的行数将是'length(list.files(pattern =“*。txt”))',并且列的数量将是应该存在的列的数量。那么你可以做一些像'as.data.frame(矩阵(NA,ncol =列数,nrow =行数))' – JackeJR

相关问题