2014-10-07 4 views
0

R rookie здесь.Извлечь имя файла из фрейма данных

У меня есть цикл, который я использую для создания выходных файлов. Я использую фрейм данных как вход в цикл, цикл запускает запрос для каждого значения «id» в кадре данных. Один из столбцов в моем кадре данных содержит имя выходного файла. У меня возникли проблемы с тем, чтобы цикл динамически читался в имени файла и вставлял его в оператор write.table.

Рабочий пример:

ID = c(123,124) 
ExtractName = c("sessions.txt","hits.txt") 
Dimensions = c("ga:date", "ga:date") 
Mertics = c("ga:sessions", "ga:hits") 
Extracts = data.frame(ID, ExtractName, Dimensions, Mertics) 

for(i in seq(from=1, to=nrow(Extracts), by=1)){ 
    id <- Extracts[i,1] 
    myresults <- ga$getData(id,batch = TRUE, start.date="2013-12-01", end.date="2014-01-01", metrics = Extracts[i,4], dimensions = Extracts[i,3]) 

    write.table(myresults, file=***dynamicnamehere***, append=TRUE, row.names = FALSE, col.names = appendcolheads, sep="\t") 
} 
+0

Я заметил, что у вас есть дубликаты 'filenames' в вашем исходном наборе данных. Является ли это опечаткой или возможно, что разные идентификаторы «идентификаторы» имеют одинаковое имя файла? – akrun

+0

Да, возможно иметь одинаковое имя файла - я не перечислял весь цикл, но в некоторых случаях он будет прикрепляться к тому же файлу. – davids12

+0

Если 'myresults' находятся в' list' с длиной списка, равным 'nrow' набора данных' input', возможно, 'lapply (seq_along (myresults), function (i) write.table (myresults [[i]], file = input $ filename [i], ....)) '(не тестировался без примерного набора данных) – akrun

ответ

1

Давидс, я сделал небольшие изменения в вашем примере кода, как это генерируется ошибка.

2 вещи для поиска: при создании DataFrame добавьте «stringsAsFactors = FALSE», иначе имена файлов являются факторами, которые вы не хотите.

Extracts = data.frame(ID, ExtractName, Dimensions, Mertics,stringsAsFactors=FALSE) 

file - Аргумент в вашем для цикла: file=Extracts$ExtractName[i]

Это слегка измененный код должен дать вам желаемые результаты.

ID = c(123,124) 
ExtractName = c("sessions.txt","hits.txt") 
Dimensions = c("ga:date", "ga:date") 
Mertics = c("ga:sessions", "ga:hits") 
Extracts = data.frame(ID, ExtractName, Dimensions, Mertics,stringsAsFactors=FALSE) 

for(i in seq(from=1, to=nrow(Extracts), by=1)){ 
    id <- Extracts[i,1] 
    myresults <- c(id, start.date="2013-12-01", end.date="2014-01-01", metrics = Extracts[i,4],  dimensions = Extracts[i,3]) 
    write.table(myresults, file=Extracts$ExtractName[i], append=TRUE, row.names = FALSE, sep="\t") 
} 
+0

Отлично, спасибо! – davids12

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