我已经编写了以下查询来研究我的分析的一些示例方法,这项工作很好,我不需要提供这些代码。但是我需要理解"",; sep=""
和dbGetQuery中的limit语句的使用。
df <- data.frame(Sample.Num = integer(),
Sample.Mean = integer(),
quant.01 = integer(),
quant.05 = integer(),
quant.10 = integer(),
quant.25 = integer(),
quant.50 = integer(),
quant.75 = integer(),
stringsAsFactors = FALSE)
df[1,] <- NA
for (i in 1:500){
sdf <- dbGetQuery(con,"select col11,col23,col30
from schema.db.name
where col1 in ('value1')
and col2 in ('(v3) - value3')
and col3 in ('v0123 - value4')
order by random()*600000 limit 100")
meansample <- mean(sdf$mileage,na.rm = TRUE)
quant.01 <- quantile(sdf$mileage,na.rm = TRUE,probs = .01)
quant.05 <- quantile(sdf$mileage,na.rm = TRUE,probs = .05)
quant.10 <- quantile(sdf$mileage,na.rm = TRUE,probs = .10)
quant.25 <- quantile(sdf$mileage,na.rm = TRUE,probs = .25)
quant.50 <- quantile(sdf$mileage,na.rm = TRUE,probs = .50)
quant.75 <- quantile(sdf$mileage,na.rm = TRUE,probs = .75)
dbDisconnect(con)
问题:
Col1,2&amp; 3有字符值。现在我需要为col2的所有7个值和col3的9个值检查相同的内容。每当我使用col1,2,3的任何特定值时,我都需要将它们存储在数据帧中,以便在循环结束之前执行某些操作,并以第二个值重新启动。
因此,这需要学习:Add a dynamic value into RMySQL getQuery
我也研究过gsub
和shQuote
。尽管存在多种组合以及限制声明,但我无法概念化'", df[i], "';", sep = ""
的使用。如果它是本地数据库,我可以使用dplyr
包来运行循环。我了解seq_along()
需要一个数值,并且要通过循环设置正确的值&#39;在()查询中。我确实尝试了paste0和paste参数以及collapse =&#34;,&#34;争论但没有帮助。
我也尝试过以下帖子中的lapply
,但它在()查询中不起作用。
How to do dbGetQuery for loop in R
(v3) - value3,(v1) - value1等是col中的实际元素。这是属性col2,col3等的代码和描述的组合。
答案 0 :(得分:0)
假设您有一个查询,并希望替换其中的某些范围值。
sql <- "select col11,col23,col30
from schema.db.name
where col1 in (%s)
and col2 in (%s)
and col3 in (%s)
order by random()*600000 limit 100"
这里我将使用 sprintf 在查询中进行替换, 所以我在字符串中留下了标记(%s )。 因此,让我们设置3个我们想要测试的范围:
col1 <- 1:10
col2 <- c('a', 'f', 'z')
col3 <- c('name1', 'name2')
# create strings that are valid in SQL
col1_sql <- paste(col1, collapse = ',')
col2_sql <- paste0("'", col2, "'", collapse = ',') # put quotes on strings
col3_sql <- paste0("'", col3, "'", collapse = ',')
# now substitute back in query
sql_new <- sprintf(sql,
col1_sql, # strings we just constructed
col2_sql,
col3_sql
)
# print out the query
cat(sql_new)
以下是查询内容:
select col11,col23,col30
from schema.db.name
where col1 in (1,2,3,4,5,6,7,8,9,10)
and col2 in ('a','f','z')
and col3 in ('name1','name2')
order by random()*600000 limit 100