2016-01-20 66 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

相關問題