2016-06-14 11 views
0

kombinieren Ich habe einen Datensatz im TXT-Format mit 31968 Dateien und jede Datei enthält 365 Werte in einer Spalte. Ich möchte jede 48 Dateien in Folge kombinieren und das wird 17520 Werte als Ergebnis bringen.Wie Vektoren in R

Inputs as like 
    a = (X1, x2…………………………………x48) 
    b =(x49, x50 ………………………………x96) 

    Expected outputs like as 
    a = (1, 2, 3, 4,………………………………..17520) 
    b= (1, 2, 3, …………………………………..17520) 

Wie ich das Bündel von 31968 Datei laden und ausführen kann diese Arbeit in R.

+0

Sie die Dateien in R gelesen haben? Was sind 'X1, X2, ... usw.'? Wenn X1, X2 usw. Spalten eines Datasets sind. 'unlist (dat [paste0 (" X ", 1:48)], use.names = FALSE)' – akrun

+0

Sind die Dateien auf eine nette Weise benannt, um vorhersagbar zu machen, welche kombiniert werden sollten? Sie sollten wahrscheinlich beginnen, indem Sie sie in [als eine Liste von Datenrahmen] lesen (http://stackoverflow.com/a/24376207/903061). – Gregor

Antwort

0

Da 31968/48 666 ergibt, erstellen Sie eine Liste mit 666 Vektoren, die jeweils 48 Dateinamen enthalten.

file_names <- list.files(path=".", pattern="\\.txt") # change the path to the directory where the files are kept 
list_of_files <- lapply(1:666, function(x) file_names[((x-1)*48 + 1):((x-1)*48 + 48)]) 

die Dateien in R als list_of_data Lesen und verwenden do.call & rbind in einem einzigen data.frame zu konvertieren.

for(i in 1:666){ 
    list_of_data <- lapply(list_of_files[[i]], read.table, sep="\t") # put in appropriate read.table parameters for the text files 
    assign(paste0("a", i), do.call(rbind, list_of_data)) 
    } 

Alternative:

for(i in 1:666){ 
    list_of_data <- lapply(list_of_files[[i]], read.table, sep="\t") 
    assign(sprintf("a.%03d", i), do.call(rbind, list_of_data)) 
    } 

Dies sollte 666 Objekte zurückgeben z.B.

"a.001" "a.002" "a.003" "a.004" "a.005" "a.006" "a.007" "a.008" "a.009" "a.010" "a.011" 
"a.012" "a.013" "a.014" "a.015" "a.016" "a.017" "a.018" "a.019" "a.020" "a.021" "a.022" 

Um alle 666 data.frame fusionieren:

frames <- grep("a[.]", ls(), value=T) 
library(plyr) 
output <- ldply(frames, get) 
+0

@ Adam danke, dieser Befehl funktioniert richtig, aber eine Sache, die ich Ihnen fragen würde, schlagen Sie mir einen einfachen und schnellen Befehl zum Zusammenführen aller 666 dafa.frame und exportieren in CSV, TXT oder XLSX-Format. – irfan

+0

Angenommen, Sie haben 666 data.frames, 'a.1, a.2, a.3, ..., a.666', (i) erstellen Sie einen Vektor mit den Namen der Daten.Frames mit 'frames <-grep (" a [.] ", ls(), value = TRUE)'; (ii) setze sie in eine Liste mit 'list_of_frames <- lapply (frames, function (x) get (x))'; (iiI) benutze do.call, um die list_of_frames mit 'dat <- do.call (rbind, list_of_frames) zu binden –

+0

Exportiere dat nach csv mit write.csv; dat zu txt mit write.table. Nicht helfen beim Exportieren in xlsx Format. –

0
setwd('files location') 
file_names = list.files() 
for(i in 1:length(file_names)){ 
    p = data.frame() 
    for(i in i:i+47){ 
     setwd('input files location') 
     d = read.table(file_names[i],col.names=c("id"),strip.white=TRUE) 
     p = rbind(p,d) 
    } 
    setwd('output location') 
    write.table(p,paste(file_names[i],".txt",sep=""),row.names=F) 
} 

Sehen Sie, dass alle Ihre Eingabedateien in einem einzigen Verzeichnis liegen und keine anderen Dateien in diesem Verzeichnis vorhanden sind . Die Ausgabe wird mit dem Namen der 48. Datei erstellt, die in jeder Kombinationsliste von 48 Dateien gelesen wird.

+0

@ Reddy, ich habe diesen Fehler im Ergebnis Ihrer vorgeschlagenen Lösung (Fehler in Datei (Datei, "RT"): kann die Verbindung nicht öffnen Zusätzlich: Warnmeldung: In Datei (Datei, "RT"): kann nicht Öffne Datei 'NA': Keine Datei oder Verzeichnis) – irfan

+0

kannst du den Code schreiben, den du hier versucht hast Erzähl mir auch, welche Zeile dir diesen Fehler gegeben hat –

+0

setwd ('') file_names = list.files() für (i in 1: length (file_names)) { p = data.frame() für (i in i: i + 47) { setwd ('Eingabeposition) d = read.table (file_names [i], col.names = c ("id"), strip.white = WAHR) p = rbind (p, d) } se twd ('Ausgabeort') write.table (p, einfügen (file_names [i], ". txt", sep = ""), row.names = F) } Ich konnte die "Datei, rt" nicht verstehen was fälschlicherweise angezeigt wird und wahrscheinlich im vorletzten Befehl auftritt. – irfan

Verwandte Themen