2016-08-23 55 views
0

我在具有不同後綴的文件夾中有多個.csv文件。例如:基於數據框後綴的動態列創建

Data_Software 
Data_Hardware 
Data_Manufacturing .... 

&類似許多其他.csv文件。我想在這些數據集的每一箇中創建一個新的列,例如「type」,它將包含相應文件的後綴。 Data_Software中的類型列的所有觀察結果應該說軟件,Data_Hardware應該有硬件。

有人可以幫忙嗎?

+0

如何導入數據?你可能想嘗試:'df1 $ type <-unlist(lapply(strsplit(df1 $ firstColumn,split =「_」),function(x)x [[2]]))';其中'df1'是導入爲'data.frame'的文件之一,列名爲'firstColumn'。 – Abdou

回答

0

雖然我不會建議,我可能會做是這樣的:

library(data.table) # need for fread and := 

# Get a list of all files in the directory 
my_dir <- "my_path_here"  
FILES <- list.files(path = my_dir, pattern="*.csv$", full.names = TRUE, recursive = FALSE) 

# Read every file 
lapply(FILES, function(x) { assign(gsub(paste0(my_dir,"/|\\.csv$|Data_"),"",x),fread(x, header = T)[, Type := gsub(paste0(my_dir,"/|\\.csv$|Data_"),"",x)], envir = .GlobalEnv)}) 

這會爲每個CSV表 - 表被命名爲相同的名稱文件,剝離擴展,路徑和Data_。它還會創建一個表格名稱爲

0

試試這個,對不起,認爲他們是在您的環境data.frames,這種情況並非如此,隨意忽略/修改建議:

# Data frames in your environment 
Data_Tom <- iris 
Data_Dick <- iris 
Data_Harry <- iris 

# Get the names of the objects 
objs <- ls(pattern = "Data_") 

# Add the suffix as a the column 
objs <- lapply(objs, 
       function(x){ 
       type <- gsub("Data_", "", x) 
       df <- get(x) 
       cbind(df, Type = type) 
       }) 

# Combine them together, you might not need this 
combine <- do.call(rbind, objs)