2013-02-26 7 views
2

Я знаю, что это может быть очень глупым вопросом, но я проводил часы на этомчтения файл .csv с неведомым путем - R

хочет читать CSV-файл, который я не имею полный путь (*/* data.csv). Я знаю, что после бы получить путь текущего каталога, но не знаете, как адаптировать

Marks <- read.csv(dir(path = '.', full.names=T, pattern='^data.*\\.csv')) 

попробовал этот, как хорошо, но не работает

Marks <- read.csv(file = "*/*/data.csv", sep = ",", header=FALSE)) 

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

и планирую называть это из unix, который определяет рабочее пространство

моей структура данных

lecture01/test/data.csv 
lecture02/test/data.csv 
lecture03/test/data.csv 
+0

Предположительно, вы находитесь на Linux/unix? –

+4

http: // stackoverflow.com/questions/12324539/указать-directory-with-setwd/12324637 # 12324637 –

+0

@Ricardo Saporta: У меня есть как windows, так и linux –

ответ

1

Ваши комментарии - хотя и не в настоящий момент ваш вопрос - указывают, что вы ожидаете запустить свой код в рабочем каталоге, который содержит некоторое количество подкаталогов (lecture01, lecture02 и т. Д.), Каждый из которых содержит подкаталог «метки», который, в свою очередь, содержит файл data.csv. Если это так, и ваша цель - прочитать csv изнутри каждого подкаталога, тогда у вас есть пара опций в зависимости от остальных деталей.

Случай 1: Укажите имена каталогов верхнего уровня непосредственно, если вы знаете их всех, и они потенциально своеобразные:

dirs <- c("lecture01", "lecture02", "some_other_dir") 
paths <- file.path(dirs, "marks/data.csv") 

Случай 2: Построить имена каталогов верхнего уровня, например, если все они начинаются с «лекции», а затем двухзначное число, и вы можете (или, в частности, пожелать) указать числовой диапазон, например. 01, хотя 15:

dirs <- sprintf("lecture%02s", 1:15) 
paths <- file.path(dirs, "marks/data.csv") 

Случай 3: Определить имена каталогов верхнего уровня путем сопоставления шаблона, например, если вы хотите, чтобы прочитать данные из каталога в каждом, начиная со строки «лекции»:

matched.names <- list.files(".", pattern="^lecture") 
dirs <- matched.names[file.info(matched.names)$isdir] 
paths <- file.path(dirs, "marks/data.csv") 

После того, как у вас есть вектор пути, я бы, вероятно, использовать lapply для чтения данных в список для дальнейшей обработки , называя каждого из них с именем базового каталога:

csv.data <- lapply(paths, read.csv) 
names(csv.data) <- dirs 

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

Если этот ответ пропустит отметку, даже если это не так, было бы здорово, если бы вы могли прояснить вопрос соответствующим образом.

+0

thanx a lottttt ... Возможно, я задал неправильный вопрос, поскольку я просто пытаюсь узнать что-то ... проверьте ссылку ... это может дать вам лучшее представление о том, что я пытаюсь достичь, и почему я, хотя его хорошо читать файл ... [link] (http://stackoverflow.com/questions/15095196/loop-for-applying-script-to-sub-folders-and-name-results-accordingly-r) –

+0

В чем причина 'dirs <-matched.names [file.info (matched.names) $ isdir]'? потому что он работает даже без него. –

+0

matched.names будут содержать имена любых каталогов * и * файлов, соответствующих шаблону list.files. Это было бы проблемой, если, например, у вас также есть файл под названием «lecture_notes.txt» в вашем рабочем каталоге. Последующая строка извлекает только имена каталогов. Похоже, что это (в настоящее время) ненужно для вас, но я все равно буду держать его там в качестве защитной практики программирования. – regetz

0

У меня нет коды, но я хотел бы сделать затворник Glob от корня и сделать preg_match, чтобы найти файл в формате CSV (используйте Глоба распорку).

Смежные вопросы