2016-08-23 4 views
0

У меня есть несколько CSV-файлов в папке с различным суффиксом. Для например:Создание динамических столбцов на основе суффикса dataframe

Data_Software 
Data_Hardware 
Data_Manufacturing .... 

& так же многих других файлов .csv. Я хочу создать новый столбец в каждом из этих наборов данных, скажем, «type», который будет содержать суффикс соответствующего файла i.e .; все наблюдения столбца типа в 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) 
Смежные вопросы