1

各ステップで変化する基準に基づいて、特定の SQL クエリを出力する for ループを作成しようとしています。さらに、それらを作成するステップに基づいて出力名を指定しようとしています。たとえば、ステップ 1 では、種 1 というテーブルが出力されます。私が書き込もうとしたコードは以下のとおりです。答えは簡単だと思いますが、私の人生では、これを表現する正しい方法がわかりません. よろしくお願いいたします。

for (i in 1:15) {
Species[i]<-sqldf("SELECT StartYear, StartMonthNo, RegionCode, CommonName, EstimatedBiomassg, ScaledProportionofDominantNektonBiomass
                FROM TrawlBiomassbyMonth
                WHERE CommonName = TopSpecies[i,1]
                AND RegionCode=1")

Species[i]TimeSeries<-sqldf("SELECT TimeSeries.StartYear, TimeSeries.StartMonthNo, CommonName, EstimatedBiomassg, ScaledProportionofDominantNektonBiomass
                FROM TimeSeries
                LEFT JOIN Species[i]
                ON TimeSeries.StartYear = Species1.StartYear 
                AND TimeSeries.StartMonthNo = Species1.StartMonthNo")
Species[i]TimeSeries[is.na(Species[i]TimeSeries)] <- 0}

編集

簡単な例を次に示します。

for (i in 1:2) {
  Species[i]<-sqldf("SELECT StartYear, StartMonthNo, CommonName, Biomass
                    FROM ExampleBiomass
                    WHERE CommonName = ExampleTopSpecies[i,1])}

バイオマスの排出量

structure(list(StartYear = c(1985L, 1985L, 1985L, 1985L, 1985L, 
1985L, 1985L, 1985L, 1985L, 1985L, 1985L, 1985L, 1986L, 1986L, 
1986L, 1986L, 1986L, 1986L, 1986L, 1986L, 1986L, 1986L, 1986L, 
1986L), StartMonthNo = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
12L), CommonName = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 
2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L
), .Label = c("Ninja", "Pirate"), class = "factor"), Biomass = c(26L, 
107L, 126L, 35L, 84L, 147L, 98L, 141L, 112L, 43L, 28L, 79L, 36L, 
126L, 31L, 89L, 133L, 34L, 38L, 117L, 92L, 81L, 93L, 127L)), .Names = c("StartYear", 
"StartMonthNo", "CommonName", "Biomass"), class = "data.frame", row.names = c(NA, 
-24L))

TopSpeciesのdput

structure(list(CommonName = structure(1:2, .Label = c("Ninja", 
"Pirate"), class = "factor"), Biomass = c(500L, 450L)), .Names = c("CommonName", 
"Biomass"), class = "data.frame", row.names = c(NA, -2L))
4

1 に答える 1

1

次のようなものを使用できます。

basic_query <- "SELECT StartYear, StartMonthNo, CommonName, Biomass FROM ExampleBiomass WHERE CommonName = "

Species <- list()

for (i in 1:2) {
  Species[[i]] <- sqldf(paste(basic_query, as.character(ExampleTopSpecies[i,1])))
}

いくつかの説明:

  • basic_querySQL クエリの共通部分を保存します。
  • Species <- list()ループによって埋められる空のリスト オブジェクトを作成します。
  • Species[[i]] <-list に要素を追加しますSpecies
  • paste文字列を連結するだけです。
  • as.character(ExampleTopSpecies[i,1])データフレームには要素が含まれているため、必要です。
于 2013-08-19T17:22:08.617 に答える