2016-08-23 103 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) 
相关问题