2017-10-30 7 views
0

Ich habe den folgenden Code:Wie teile ich ein Vektorelement in zwei Teile auf?

file_list <- list.files(path=folder, pattern="*.txt") ##creates list of all txt. files in folder 

file_list 

o<- file_list[order(as.numeric(gsub(".+_(\\d+)\\.txt$", "\\1", file_list)))]## orders list in numerical order by ending 

r <- sapply(o, FUN = function(x){ 

    df = read.table(x, skip=1) ##x is the file name from list 

    mean(df$V4) 

}) ###takes mean of selected column from entire list and produces below output 

dies liefert die folgende Ausgabe:

172010_001_120VC_0.1_1100.txt 3.817672e-07 
172010_001_120VC_0.1_1080.txt 3.893099e-07 
172010_001_120VC_0.1_1090.txt 4.386539e-07 

Wie kann ich die Ausgabe in einen Vektor/Datenrahmen drehen waren x = die letzten Ziffern der Bezeichnung txt-Datei (1100, 1080, 1090 usw.) und y = der numerische Wert (3.817672e-07, 3.893099e-07, 4.386539e-07 usw.)

Antwort

0

Da die Länge aller Vektorelemente in diesem Fall gleich ist, Sie können substr() Funktion verwenden (die inist NurPaket.) durch direkte Bereitstellung von Zeichenpositionen.

Ausgabe in Frage gegeben Erstellen

vec <- c("172010_001_120VC_0.1_1100.txt 3.817672e-07","172010_001_120VC_0.1_1080.txt 3.893099e-07","172010_001_120VC_0.1_1090.txt 4.386539e-07") 

Druckausgabe gegeben in Frage

vec 
# [1] "172010_001_120VC_0.1_1100.txt 3.817672e-07" 
# [2] "172010_001_120VC_0.1_1080.txt 3.893099e-07" 
# [3] "172010_001_120VC_0.1_1090.txt 4.386539e-07" 

gewünschtes Ergebnis mit substr() Funktion

df <- data.frame(x = substr(vec, 22, 25), y = substr(vec, 33, 44)) 
df 
#  x   y 
# 1 1100 3.817672e-07 
# 2 1080 3.893099e-07 
# 3 1090 4.386539e-07 
+1

Die Ausgabe, die Sie zur Verfügung gestellt haben, ist, was ich suche, aber es gibt ungefähr 100 Dateien, gibt es irgendwie, um über Ihre Annäherung zu gehen, ohne sie alle manuell einzugeben? die Länge für alle 100 sind gleich – wiggle

+0

Sie meinen 100 Dateien in der Ausgabe Ihres Codes richtig? –

+0

Das 'vec' sollte die Namen dieser Dateien und den numerischen Wert als eine einzelne Zeichenfolge haben..so dieser Code wird leicht funktionieren. Speichern Sie Ihre Ausgabe in einem Vektor wie ich es getan habe. Wie Sie sagten, werden diese von dem obigen Code ausgegeben. So speichern Sie es einfach in einem Objekt, keine Notwendigkeit, Vektor manuell zu erstellen. Verwenden Sie dieses Objekt in diesem Code, um jedes Element zu teilen. Lassen Sie mich wissen, wenn irgendein Problem. In Ihrem Fall hat das Objekt "r" alle Dateinamen und numerischen Werte, verwenden Sie das Objekt "r" im obigen Skript anstelle von 'vec'. –

Verwandte Themen