【发布时间】:2012-09-21 17:48:57
【问题描述】:
解决方案:
结合下面的答案:
#First create a vector with all my dates
#Create a frame to hold the data
testdf = data.frame(sdci=rep("",1),stringsAsFactors=FALSE)
#needs library(lubridate) for month/year functions
library(lubridate)
#Loop and Add data to the df
for (i in 1:lenght(dates2){testdf[i, ] = c(dbGetQuery(con,paste0(' SELECT \
sdci_',year(dates2[i]),'_',sprintf("%02d",month(dates2[i])),'_mean from \
gr_sea_outlets_tier2 order by area_km2'))}
编辑结束
我正在使用这个命令一个接一个地获取我的数据:
data$"2000/8/1" = dbGetQuery(db,"SELECT sdci_2000_08_mean as '2000/08/01' from gr_sea_outlets_tier2 order by area_km2 desc limit 1;")
但由于我有 50 张桌子,所以过程变得有点烦人。
我正在尝试为它创建一个循环,但我不知道语法。
这是我想做的一些伪代码(类似bash):
for year in $(seq 2000 2010); do
for month in $(seq -w 05 09); do
data$"$year"/"$month"/01" = dbGetQuery(db,"SELECT sdci_$year_$month_mean as '$year/$month/01' from gr_sea_outlets_tier2 order by area_km2 desc limit 1;");
done;
done
作为一个临时解决方案,我设法让 bash 创建一组命令供我解析为 R。
for year in $(seq 2000 2010); do for month in $(seq -w 05 09); do echo data\$\'"$year"-"$month"-"01"\' \<\- dbConnect\(db,\"SELECT sdci_"$year"_"$month"_mean from gr_sea_outlets_tier2 order by area_km2 desc limit 1\;\"\) >> r.cmd.data ; done; done
但我认为它可以在 R 内完成
【问题讨论】:
-
交叉发布是个坏主意。无论如何,这在这里更相关。仅仅因为 R 是一种统计语言并不意味着您的问题与统计数据有关。
-
另外,您是否尝试过查找
for循环的语法?您可以使用?`for`或搜索for loop r获取语法。 -
您在 R 语法中的一个示例似乎与其他示例不一致。您选择 sdci_2000_07_mean 但其余的似乎使用 2000/08。这应该修复吗?
-
是的,我在做实验,那是我实验的遗留物 :)