每一行的新列都来自对R中mysql数据库的查询

时间:2017-07-26 08:59:33

标签: sql r rmysql

我有一个包含三列的简单数据框。其中一列包含数据库名称。我首先需要检查数据是否存在,如果不存在,请插入它。否则什么都不做。

示例数据框:

clientid;region;database
135;Europe;europedb
2567;Asia;asiadb
23;America;americadb

所以我创建了一个以这种方式应用于数据帧的函数:

library(RMySQL)

    check_if_exist <- function(df){

    con <- dbConnect(MySQL(),
                       user="myuser", password="mypass",
                       dbname=df$database, host="myhost")

    query <- paste0("select count(*) from table where client_id='", df$clientid,"' and region='", df$region ,"'")

    rs <- dbSendQuery(con, query)

    rs

    }

函数调用:

df$new_column <- lapply(df, check_if_exist)

但这不起作用。

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话,这是你要问的一个有效例子。但是我没有你的数据库,所以我们只打印查询进行验证,然后取一个随机数作为结果。

请注意,通过执行lapply(df,...),您将循环遍历数据库的列,而不是您想要的行。

df = read.table(text="clientid;region;database
135;Europe;europedb
2567;Asia;asiadb
23;America;americadb",header=T,sep=";")


check_if_exist <- function(df){
  query = paste0("select count(*) from table where client_id='", df$clientid,"' and region='", df$region ,"'")
  print(query)
  rs <- runif(1,0,1)
  return(rs)
}

df$new_column <- sapply(split(df,seq(1,nrow(df))),check_if_exist)

希望这有帮助。