2016-10-19 5 views
-1

Ich mag mehrere Textdateien aus meinem Verzeichnis lesen, die Dateien in folgendem FormatFehler beim Lesen multple Textdateien aus dem Verzeichnis in R

regional_vol_GM_atlas1.txt 
regional_vol_GM_atlas2.txt 
........ 
regional_vol_GM_atlas152.txt 

Daten aus den Dateien

667869 667869 
580083 580083 
316133 316133 
3631 3631 
sieht in folgendem Format angeordnet sind,

finden Sie das Skript, das i

library(readr) 
library(stringr) 
library(data.table) 

array <- c() 
for (file in dir(/media/dev/Daten/Task1/subject1/t1)) # path to the directory where .txt files are located 
    { 

    row4 <- read.table(file=list.files(pattern ="regional_vol*.txt"), 
        header = FALSE, 
        row.names = NULL, 
        skip = 3, # Skip the 1st 3 rows 
        nrows = 1, # Read only the next row after skipping the 1st 3 rows 
        sep = "\t") # change the separator if it is not "\t" 
    array <- cbind(array, row4) 
} 

ich anfallenden follo geschrieben Flügel Fehler

Error in file(file, "rt") : invalid 'description' argument 

mich freundlich vorschlagen, wo ich im Drehbuch falsch war

+0

'myfiles <- lapply (list.files (...), read.table (...))' ist ein besseres Muster – arvi1000

+0

OP: Der Code effektiv mehrere Dateien '(list.files ist vorbei()) 'to' read.table' –

+0

@RS die Werte von in row4 gespeichert sind, gibt es 900 Dateien, so erwarte ich 900 Werte, aber ich sehe nur 1 Wert – DevanDevak

Antwort

1

Dies scheint gut für mich zu arbeiten. Änderungen per Code Kommentare, falls Dateien Header haben: [Antwort Edited widerzuspiegeln neue Informationen veröffentlicht von OP]

# rm(list=ls()) #clean memory if you can afford to 

mydir<- "~/Desktop/a" #change as per your path 
# read full paths 
myfiles<- list.files(mydir,pattern = "regional_vol*",full.names=T) 
myfiles #check that files listed correctly 

# initialise the dataframe from first file 
# change header =T/F depending on presence of header 
# make sure sep is correct  

df<- read.csv(myfiles[1], header = F, skip = 0, nrows = 4, sep="")[-c(1:3),] 
#check that first line was read correctly 
df 
#read all the other files and update dataframe 
#we read 4 lines to read the header correctly, then remove 3 
ans<- lapply(myfiles[-1], function(x){ read.csv(x, header = F, skip = 0, nrows = 4, sep="")[-c(1:3),]  }) 
ans 


#update dataframe 
lapply(ans, function(x){df<<-rbind(df,x)} ) 

#this should be the required dataframe 
df 

Auch, wenn Sie auf Linux sind, wäre eine viel einfache Methode, um einfach das OS zu machen machen es für Sie

awk 'FNR == 4' regional_vol*.txt 
+0

Ich möchte die vierte Zeile jeder Textdatei in ein Array extrahieren, aber wenn ich den Datenrahmen sehe ans, ich sehe nichts importiert – DevanDevak

+0

Die Werte in Myfiles ist leer – DevanDevak

+0

trotz gibt es das richtige Verzeichnis in Zeile 1? –

0

Dieses es für Sie tun sollten.

# set the working directory (where files are saved) 
setwd("C:/Users/your_path_here/Desktop/") 

file_names = list.files(getwd()) 
file_names = file_names[grepl(".TXT",file_names)] 

# print file_names vector 
file_names 

# read the WY.TXT file, just for testing 
# file = read.csv("C:/Users/your_path_here/Desktop/regional_vol_GM_atlas1.txt", header=F, stringsAsFactors=F) 

# see the data structure 
str(file) 

# run read.csv on all values of file_names 
files = lapply(file_names, read.csv, header=F, stringsAsFactors = F) 
files = do.call(rbind,files) 

# set column names 
names(files) = c("field1", "field2", "field3", "field4", "field5") 
str(files) 


write.table(files, "C:/Users/your_path_here/Desktop/mydata.txt", sep="\t") 
write.csv(files,"C:/Users/your_path_here/Desktop/mydata.csv") 
Verwandte Themen