2017-03-10 3 views
-3

Ich habe eine for Schleife, die zusammenfassende Statistiken für jede Volkszählung in meiner Gegend läuft, und ich brauche sie in einen Ordner als CSV-Datei ausgegeben werden. Die Schleife funktioniert jedoch, die Ausgabedateien haben den Typ "Datei".r Funktion "write.csv" nicht Dateierweiterung

Ich möchte auch alle genannten Dateien in einem Datenrahmen zu kombinieren, so dass ich eine Datei mit der Zusammenfassung Statistiken für alle Volkszählungs-Traktate haben. Ich habe eine "multi merge" -Funktion gefunden, aber es funktioniert nicht richtig und ich denke, dass es mit der Tatsache zu tun hat, dass meine Dateitypen keine CSVs sind. Mein Code Chunk ist unten:

######################################################################################## 
## create tables with summary statistic's############################################### 
######################################################################################## 

setwd("C:/Data/nih/data/output/csv/merge")   #choose destination folder 

for (result in [email protected]){ 
    print(as.character(result$areaid))     #print each file name into console as script runs 
    census.name <- as.character(result$areaid)   #derive census tract from area ID 

    #create table for each census tract using summary statistics 
    table.unique <- c(mean(result$selection$BMI, na.rm = TRUE),sum(result$selection$female), sum(result$selection$male), 
        sum(result$selection$diabet),sum(result$selection$white), sum(result$selection$black), 
        sum(result$selection$indian), sum(result$selection$asian), sum(result$selection$pacific), 
        sum(result$selection$other), sum(result$selection$mixed)) 
    table.unique <- c(census.name,table.unique)   #combine census tract as column to summary stats 
    col.names <- c("areaID","BMI","female","male","diabet","white","black","indian","asian","pacific","other","mixed") 
    table.unique <- as.numeric(table.unique) 
    table.unique <-as.data.frame(t(table.unique))  #turn comlums into rows 
    names(table.unique) <- col.names     #add column names 
    write.csv(table.unique, file = census.name)   #write csv to output folder 
} 

#merge all files into single data frame 

multmerge = function(mypath){ 
    filenames=list.files(path=mypath, full.names=TRUE) 
    datalist = lapply(filenames, function(x){read.csv(file=x,header=TRUE)}) 
    Reduce(function(x,y) {merge(x,y)}, datalist) 
} 

all.tracts <- multmerge("C:/Data/nih/data/output/csv/merge") 

Der Code funktioniert, dass sie Dateien in den Ausgabeordner gibt, und sie durch Komma getrennt sind, wenn sie in Excel geöffnet, aber der einzige Weg, dies zu tun ist, zu gehen und manuell hinzufügen .csv zum Ende des Namens, der den Zweck einer Schleife besiegt. Irgendwelche Vorschläge wären hilfreich!

+1

Versuchen 'write.csv (table.unique, file = Paste (census.name, census.name mit " csv", sep = "")) ' –

+0

Nirgendwo sagt' write.csv', dass es den von Ihnen angegebenen Dateinamen ändert. Wenn Sie die '.csv'-Erweiterung möchten, fügen Sie sie in den Dateinamen ein, den Sie' write.csv' geben. – Gregor

+1

@ d.b Das hat super funktioniert! Danke für die schnelle Antwort! – Michael

Antwort

1

write.csv nicht automatisch fügen Sie die Erweiterung der Datei, die Sie speichern. Sie müssen den vollständigen Dateinamen (oder Dateipfad, wenn Sie möchten) selbst angeben.

Versuchen Sie Folgendes in Ihrem Code verwenden, wo wir .csv hinzufügen paste

write.csv(table.unique, file = paste(census.name,".csv",sep="")) 
1

Die Datei, die Sie schreiben, wird als .csv formatiert, aber ohne die Erweiterung.

Um die Erweiterung zu erhalten, müssen Sie ".csv" zum file = Argument von write.csv

Insbesondere einzufügen:

write.csv(table.unique, file = paste(census.name, ".csv", sep = ''))

:

write.csv(table.unique, file = census.name)

muss geändert werden

Diese c Ode die .csv Erweiterung auf dem census.name Zeichenfolge enthalten:

######################################################################################## 
## create tables with summary statistic's############################################### 
######################################################################################## 

setwd("C:/Data/nih/data/output/csv/merge")   #choose destination folder 

for (result in [email protected]){ 
    print(as.character(result$areaid))     #print each file name into console as script runs 
    census.name <- as.character(result$areaid)   #derive census tract from area ID 

    #create table for each census tract using summary statistics 
    table.unique <- c(mean(result$selection$BMI, na.rm = TRUE),sum(result$selection$female), sum(result$selection$male), 
        sum(result$selection$diabet),sum(result$selection$white), sum(result$selection$black), 
        sum(result$selection$indian), sum(result$selection$asian), sum(result$selection$pacific), 
        sum(result$selection$other), sum(result$selection$mixed)) 
    table.unique <- c(census.name,table.unique)   #combine census tract as column to summary stats 
    col.names <- c("areaID","BMI","female","male","diabet","white","black","indian","asian","pacific","other","mixed") 
    table.unique <- as.numeric(table.unique) 
    table.unique <-as.data.frame(t(table.unique))  #turn comlums into rows 
    names(table.unique) <- col.names     #add column names 
    write.csv(table.unique, file = paste(census.name,".csv", sep=''))   #write csv to output folder 
} 

#merge all files into single data frame 

multmerge = function(mypath){ 
    filenames=list.files(path=mypath, full.names=TRUE) 
    datalist = lapply(filenames, function(x){read.csv(file=x,header=TRUE)}) 
    Reduce(function(x,y) {merge(x,y)}, datalist) 
} 

all.tracts <- multmerge("C:/Data/nih/data/output/csv/merge") 
Verwandte Themen