我有一个名为MetricsInput的数据框,如下所示:
ID ExtractName Dimensions Metrics First_Ind
124 extract1.txt ga:date gs:sessions 1
128 extract1.txt ga:date gs:sessions 0
134 extract1.txt ga:date gs:sessions 0
124 extract2.txt ga:browser ga:users 1
128 extract2.txt ga:browser ga:users 0
134 extract2.txt ga:browser ga:users 0
我试图在循环中使用上面的数据框来运行一系列查询,最终将创建2个文本文件extract1.txt和extract2.txt。我有first_ind字段的原因是我只想在第一次运行每个唯一文件时附加列标题。
这是我的循环 - 我遇到的问题是每个ID的数据都没有附加 - 我似乎覆盖了我的结果,而不是附加。我哪里出错了?
for(i in seq(from=1, to=nrow(MetricsInput), by=1)){
id <- MetricsInput[i,1]
myresults <- ga$getData(id,batch = TRUE, start.date="2013-12-01", end.date="2014-01-01", metrics = MetricsInput[i,4], dimensions = MetricsInput[i,3])
appendcolheads <- ifelse(MetricsInput[i,5]==1, TRUE, FALSE)
write.table(myresults, file=MetricsInput$ExtractName[i], append=TRUE, row.names = FALSE, col.names = appendcolheads, sep="\t")
}
答案 0 :(得分:1)
尽管您可以使用此代码,但它看起来并不是正确的方法。正如@MrFlick在评论中所说的那样,如果不能重现你的问题就很难提供帮助,但我会按照以下几点做点什么
GetData <- function(id, metric, dim) {
d <- ga$getData(id, batch = TRUE, start.date="2013-12-01",
end.date="2014-01-01", metrics = metric, dimensions = dim)
d$id <- id
d
}
myresults <- Map(GetData,
id = MetricsInput$ID,
metric = MetricsInput$Metrics,
dim = MetricsInput$Dimensions)
这将为您提供一个列表,其第i个组件是for循环中第i个迭代的输出。所以现在你必须把它分成两部分才能把它写在你想要的文件中
myresultslist <- split(myresults, MetricsInput$ExtractName)
myresultslist <- lapply(myresultslist, do.call, what = rbind)
Map(write.table, x = myresultslist, file = names(myresultslist),
row.names = FALSE, sep = "\t")
答案 1 :(得分:0)
为什么不在循环中创建数据框,然后将其写入文本文件?
myresults <- data.frame()
for (i in yourloop) {
#your code here
id <- MetricsInput[i,1]
temp <- ga$getData(id,batch = TRUE, start.date="2013-12-01", end.date="2014-01-01", metrics = MetricsInput[i,4], dimensions = MetricsInput[i,3])
myresults <- rbind(myresults, temp)
}
write.csv(myresults, ...)