2015-09-28 2 views
0

Я думаю, для создания лучшего примера здесь, скажем, у меня есть файл mtcars, и то, что я сделал с ним, было экспортировать каждую из его строк в независимые файлы и поместить их в пустые каталоги, как например:Построение цикла в R для сканирования всех файлов в каталоге

for(i in 1:nrow(mtcars)) 
write.table(mtcars[i,], file=paste(“mtcars”, as.character(i), ".txt", 
sep=""), row.names=FALSE, sep="\t") 

То, что я хочу сделать, это построить петлю, так что я могу сканировать папку, которая включает в себя все строки и имена столбцов и создать новый фрейм данных.

Вот что у меня есть до сих пор, и я думаю, что это только столбцы, а не строки.

myfiles<-list.files() 
for(file in mayflies){ 
if (file=="myrows.txt"){ 
myrows<-read.table(file, header=TRUE, sep="\t") 
} 
else{ 
tdataset<-read.table(file, header=TRUE, sep="\t") 
mydataset<-cbind(mydataset, tdataset) 
rm(tdataset) 
} 
} 
} 
row.names(meditates)<-myrows 

Как я могу сделать мои результаты в приведенном выше коде, создайте папку из него, сканировать все строки и столбцы, и в конечном итоге создать новый фрейм данных с первым набором кода, указанного выше? Если вы можете объяснить мне какую-то логику, которая была бы невероятно полезной.

ответ

0

Я не совсем уверен, что вы спрашиваете --- Вы хотите воссоздать свой оригинал data.frame?

Использование минимального пример:

for (i in 1:nrow(mtcars)) 
    write.table(mtcars[i,], file=paste("mtcars", as.character(i), ".txt", sep=""), row.names=FALSE, sep="\t") 

Следующий код будет реконструировать mtcars:

files <- list.files(pattern = ".txt$")   # List all .txt files 
rows <- lapply(files, read.table, header = TRUE) # Read the files into list 
res <- do.call(rbind, rows)      # combine the data.frame 
head(res) 
# mpg cyl disp hp drat wt qsec vs am gear carb 
#1 21.0 6 160.0 110 3.90 2.62 16.46 0 1 4 4 
#2 19.2 6 167.6 123 3.92 3.44 18.30 1 0 4 4 
#3 17.8 6 167.6 123 3.92 3.44 18.90 1 0 4 4 
#4 16.4 8 275.8 180 3.07 4.07 17.40 0 0 3 3 
#5 17.3 8 275.8 180 3.07 3.73 17.60 0 0 3 3 
#6 15.2 8 275.8 180 3.07 3.78 18.00 0 0 3 3 

Это то, что вы хотите? Если нет, объясните, что вы хотите в качестве вывода.

РЕДАКТИРОВАТЬ: В цикле:

files <- list.files(pattern = ".txt$")   # List all .txt files 
res <- NULL 
for (file in files) { 
    row <- read.table(file, header = TRUE) 
    res <- rbind(res, row) 
} 
head(res) 
# mpg cyl disp hp drat wt qsec vs am gear carb 
# 1 21.0 6 160.0 110 3.90 2.62 16.46 0 1 4 4 
# 2 19.2 6 167.6 123 3.92 3.44 18.30 1 0 4 4 
# 3 17.8 6 167.6 123 3.92 3.44 18.90 1 0 4 4 
# 4 16.4 8 275.8 180 3.07 4.07 17.40 0 0 3 3 
# 5 17.3 8 275.8 180 3.07 3.73 17.60 0 0 3 3 
# 6 15.2 8 275.8 180 3.07 3.78 18.00 0 0 3 3 
+0

Извините за путаницу. В нижнем коде из моего исходного сообщения я считаю, что я сделал, что я экспортировал все строки в пустой каталог. Оттуда я хочу построить цикл, чтобы я мог сканировать папку, в которую входят все имена строк и столбцов, и создать новый фрейм данных (это была моя попытка с кодом выше этого). Я думаю, что проблема с моим текущим кодом заключается в том, что он работает только для столбцов, но я хочу получить столбцы и строки. – cambelot

+0

Я переупорядочил абзацы. Надеюсь это поможет. – cambelot

+0

Я не понимаю, как это работает одновременно с строкой и столбцами. У вас есть единая система координат (т. Е. Одна запись или 1 на 1. data.frame) в каждом файле? Попробуйте исправить или изменить свой минимальный пример, чтобы точно отразить вашу проблему. –