2017-06-16 5 views
-2

Das ist mein Datenrahmenmehrere CSV-Dateien Schreiben Filter basierend auf r angewendet

df_temp=data.frame(ID=c(1,1,2,3,3),City=c("a","a","b","c","c"),Qty=c(20,14,40,50,60)) 

Ich möchte die Daten für einzigartige Stadt und den Export filtern, die auf dem gefilterten Ergebnis mit dem Namen als Namen für einzigartige basierten Daten Stadt so meine, dass ich habe 3 (a.csv, b.csv, c.csv) csv-Dateien mit Datensätzen

a.csv 
ID City Qty 
1 a 20 
1 a 14 

b.csv 
ID City Qty 
2 b 40 

c.csv 
ID City Qty 
3 c 50 
3 c 60 

Dies ist, was ich versucht habe,

name=as.character(unique(df_temp[,2])) 
df_temp1=c() 
for(i in df_temp[,2]){ 
paste("D:/Files",df_temp[i,2]) 
df_temp1[i]=filter(df_temp, City %in% c("a")) 
write.csv("D/:Files",paste("D:/Files",name[i],".csv",sep = "")) 
} 

Aber das gibt meine "FileNa.csv" mit leeren Zeilen. Jede mögliche Hilfe würde viel appreciated..Thanks

+1

erste Argument 'write.csv' soll das 'R'-Objekt zu sein, das du schreiben willst – Cath

Antwort

1
  1. Überprüfen Sie die richtigen Argumente mit ?write.csv: write.table(x, file = "").

  2. Wenn ich nicht falsch verstehe, sollte die Idee sein, zuerst die Datenrahmen zu erstellen, ohne unbedingt ihre Pfade für die Dateinamen einzuschließen.

  3. Ich denke, Sie möchten durch die einzigartigen Stadtnamen und nicht für jeden Stadtnamen in der for() Schleife.

  4. Verwenden Sie gut formatierten Code in Ihren nächsten Fragen, bitte (mit Leerzeichen - Sie können auch Google's R Style Guide konsultieren).

  5. Warum verwenden Sie = anstelle von <-? Warum verwenden Sie %in%? Warum verwenden Sie filter() anstelle von subset()? Bitte beachten Sie die entsprechenden Funktions Dokumentationen (zB: ?filter zeigt, dass diese nicht eine entsprechende Funktion für das, was Sie tun wollen!)

Der folgende speichert jeden Datenrahmen als ein Element einer Liste für jeden Stadtname. Es speichert auch eine CSV-Datei für jeden Datenrahmen (jeder Datenrahmen entspricht einer anderen Stadt).

dataframe_temp = data.frame(ID = c(1, 1, 2, 3, 3), 
          City = c("a", "a", "b", "c", "c"), 
          Qty = c(20, 14, 40, 50, 60)) 

dataframe.list <- list() 

# avoid hardcoded numbers as ", 2" as theses can 
# change in the future, after e.g. an expansion of the dataframe! 
for (city in unique(dataframe_temp$City)) { 

    print(city) 

    dataframe.list[[i]] = subset(dataframe_temp, City == city) 

    # use your folder location instead of "~/" 
    write.csv(x = dataframe.list[[i]], file = paste0("~/", "dataframe_for_city_", city,".csv")) 
} 

Für Netto-stumblers, ich die Antwort von emilliman5 für größere erweitern (man denke an das Schreiben Multi-GB viel schneller) Datensätze mit data.table:

library(data.table) 
DT <- data.table(ID = c(1, 1, 2, 3, 3), 
         City = c("a", "a", "b", "c", "c"), 
         Qty = c(20, 14, 40, 50, 60)) 
# setkeyv(DT, 'City') # check if you really need a key: https://stackoverflow.com/questions/20039335/what-is-the-purpose-of-setting-a-key-in-data-table 
invisible(lapply(unique(DT[, City]), function(city) 
      fwrite(x = subset(DT, City == city), 
       file = paste0("~/", "DT_for_city_", city,".csv")))) 
+1

Ja Das hat funktioniert .. Vielen Dank. Danke für die Mühe !!! – deepesh

1

Wie wäre es so etwas wie dieses:

df_temp=data.frame(ID=c(1,1,2,3,3),City=c("a","a","b","c","c"),Qty=c(20,14,40,50,60)) 

cities <- split(df_temp, df_temp$City) 

lapply(cities, function(x) write.csv(x, file=paste0("D:/Files/City_", x[1,"City"], ".txt"))) 
+1

siehe meine Edit – emilliman5

+0

yeah .. funktioniert perfekt gut ... Danke ..Danke für die Mühe !!!! – deepesh

Verwandte Themen