하나의 옵션은 루프 내에서 SQL 문자열을 조작하는 것입니다. 문자열 리터럴이있는 순간에 'df[2]'
은 R 이외의 문자로 해석되지 않습니다. Q에서 df
은 분명히 데이터 프레임이 아니기 때문에 (캐릭터 벡터입니다!) 내 대답에는 모호한 점이있을 것입니다. 이 같은 것이 당신이 원하는 것을 할 것입니다.
스토어 숫자 벡터 출력 :
require(RMySQL)
df <- c('a','b','c')
out <- numeric(length(df))
names(out) <- df
이제 우리는 df
의 요소를 루프 쿼리 세 번을 실행 할 수 있습니다. 루프를 두 가지 방법으로 설정할 수 있습니다. i) df
및 out
의 요소를 참조하는 데 사용하는 숫자로 i
을 사용하거나, df
의 각 요소로 i
을 차례로 사용하는 번호 (예 : a
, b
, ...)로 설정할 수 있습니다.). 아래 두 가지 버전을 모두 보여 드리겠습니다.
## Version i
for(i in seq_along(df)) {
SQL <- paste("SELECT max(ID) FROM table WHERE columna='", df[i], "';", sep = "")
out[i] <- dbGetQuery(con, SQL)
dbDisconnect(con)
}
OR : 당신은 개인적인 취향에 따라 달라집니다 사용
## Version ii
for(i in df) {
SQL <- paste("SELECT max(ID) FROM table WHERE columna='", i, "';", sep = "")
out[i] <- dbGetQuery(con, SQL)
dbDisconnect(con)
}
. 두 번째 (ii) 버전에서는 out
내의 데이터와 동일한 출력 벡터 out
의 이름을 설정해야합니다.
실제 SQL 쿼리가 게시 된 것과 유사하다고 가정하면 GROUP BY
절을 사용하여 단일 SQL 문에서 max(ID)
을 계산하기 전에 데이터를 그룹화 할 수 없습니까? 이와 같이 데이터베이스에서 간단한 일을하는 것이 훨씬 더 빠를 것입니다. 불행히도, 나는 플레이 할 SQL 인스턴스가 없으며 현재 SQL-fu는 약한 편이므로이 예제를 제공 할 수는 없습니다.
[WHERE 필드에 사용자 지정 변수가있는 RSQLite 쿼리]가 중복 됨 (http://stackoverflow.com/q/3449666/271616) –
Joshua, 그것을 지적 해 주셔서 감사합니다. 그것은 훌륭한 대답이기도합니다. 나는 RMySQL 솔루션을 찾고있었습니다. – analyticsPierce
RMySQL을 사용하든 RSQLlite를 사용하든 솔루션이 동일합니다. –