2016-12-31 2 views
0

У меня есть набор данных с именем данныхСплит данные в г и сохранить все расщепленные файлы в формате CSV

Model Garage  City  
    Honda  C  Chicago  
Maruti  B  Boston 
Porsche  A New York  
    Honda  B  Chicago 
    Honda  C New York 

Это 100000 строк, и я хочу, чтобы разделить эти данные на машине, место и город, а также сохранить раскол файлов в разных csv.

split(Data, with(Data, interaction(Model,City,Garage)), drop = TRUE) 

Теперь этот код делает его списком. Как unlist и сохранять различные файлы CSV для всех типов сплит

Honda Экс будет иметь три разделения файлов в качестве Honda C Chicago, Honda B Chicago и Honda C New York

Благодарности

+0

, что вы пробовали до сих пор? так как есть похожие вопросы уже на SO –

ответ

1
# create all combinations of data.frames possible based on unique values of Model, Garage, City 
l = split(x, list(x$Model, x$Garage, x$City)) 

# create csv filrs only if data.frame had any rows in it 
lapply(names(l), function(x) if(dim(l[[x]])[1] != 0){write.csv(l[[x]], paste0("path", x,".csv"))}) 
0

вы можете легко использовать петлю. это не должно быть проблемой со 100k или около того строк.

x <- read.table(text = "Model, Garage, City 
        Honda, C, Chicago 
        Maruti, B, Boston 
        Porsche, A, New York 
        Honda, B, Chicago 
        Honda, C, New York", sep = ",", header = TRUE) 
x 
# Model Garage  City 
# Honda  C Chicago 
# Maruti  B Boston 
# Porsche  A New York 
# Honda  B Chicago 
# Honda  C New York 

library(dplyr) 

вы просто перебрать все уникальные комбинации модели, гаражей и города, filter их из data.frame и экспортировать временную data.frame в таблицу CSV.

uni <- unique(x[,c("Model", "Garage", "City")]) 

for (j in 1:nrow(uni)) { 
    i <- uni[j,] 
    tmp <- x %>% filter(Model == i$Model, Garage == i$Garage, City == i$City) 

    write.table(tmp, paste(i$Model, "_", i$City, "_", i$Garage, ".csv")) 
} 
1

Просто, чтобы добавить больше вариантов, вы можете использовать data.table:

library(data.table) 
x <- as.data.table(x) 
x[, write.table(.SD, paste("path/file_", Model, "_", Garage, "_", City, ".csv", sep = "")), by = c("Model", "Garage", "City")] 
+0

Хорошее мышление !! –