2017-03-05 102 views
0

我有很多csv文件,我試圖讀取「data.table」。 csv文件的結構相同(3列)。如何在R中讀取多個csv文件時將數據添加爲列?

我的目標是讀取一個主數據幀中的所有csv文件!每個csv文件都應該添加爲不在列中的列。

例如:

我的主要DF結構應該是這樣的:

Name  Name2  csv_file_name_1  csv_file_name_2 ....... 

現在,我想要做的是:閱讀新的CSV文件(我讀的只是列號3)並添加到DF作爲列。

例如,如果我有30 csv文件,我必須讀取所有這些文件,並在主數據框中添加第3列作爲新列。 (最終DF應該有30列)

我寫了一些代碼,我可以讀取文件並獲取文件名,並且一切正常。

files = list.files(path = path, pattern=".*csv") 
for (i in 1:length(files)) assign(str_sub(files[i],11,-5), 
           fread(files[i],colClasses = c("NULL", "NULL", NA))) 

但是我怎樣才能將列添加到主DF? 「分配」正在創建新的數據框!

回答

1

您可能可以通過使用cbind()來實現這一目標,它可以將您讀取的每個新數據框綁定到現有數據框。我說可能是,因爲如果您希望讀取的每個CSV文件具有相同的行數,這樣做纔有意義。應該清楚爲什麼這是一項要求。有了這個警告這一點,這裏是一個代碼段讀取兩個CSV文件,給輸出的類型,你想:

df  <- read.csv(file="path/to/file1.csv", sep=",", header=TRUE) 
df_new <- read.csv(file="path/to/file2.csv", sep=",", header=TRUE) 

# this next is required only if you need to change the column names in each 
# subsequent file to something else 
names(df_new) <- c("Name2", "csv_file_name2", "other_column2") 

df <- cbind(df, df_new) 
+0

有115個csv文件,我嘗試過cbind,但仍然添加爲行不列! –

+0

@BigData您的評論沒有多大意義,但我的猜測是您當前的代碼有問題。如果你想要一個單一的最終數據框架,你的選擇真的是按行或按列組合。從你所描述的,'cbind()'是去這裏的路。 –

0

你試過cbind

理想情況下,每個CSV表都有一個唯一標識符,允許您通過該標識符進行合併。

注意,使用cbind,請注意確保每個data.frame中的行對應於相同的觀察結果(即df1中的第1行與df2中的第1行相同)。

相關問題