2014-10-07 57 views
0

R菜鳥在這裏。從數據框中提取文件名

我有一個循環,我用來創建輸出文件。我使用數據幀作爲循環的輸入,循環爲數據框中的每個「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'。這是一個錯字還是可能有不同的'ID'具有相同的文件名? – akrun 2014-10-07 15:15:59

+0

是的,它可能有相同的文件名 - 我沒有列出所有的循環,但在某些情況下,它會追加到相同的文件。 – davids12 2014-10-07 15:21:31

+0

如果'myresults'在列表中,列表的長度等於'input'數據集的'nrow',可能是'lapply(seq_along(myresults),function(i)write.table(myresults [[i]],file = input $ filename [i],....))'(沒有測試沒有示例數據集) – akrun 2014-10-07 15:28:30

回答

1

大衛,我對您的代碼示例略有變化,因爲它是產生錯誤。

2要注意的事情:在創建DataFrame時添加「stringsAsFactors = FALSE」,否則文件名是您不想要的因素。

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

file - 參數在for循環: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 2014-10-07 21:03:38