【问题标题】:Error: No Such Column using SQLDF错误:没有使用 SQLDF 的此类列
【发布时间】:2014-06-20 11:53:37
【问题描述】:

以下是脚本

> library(sqldf)
> turnover = read.csv("turnover.csv")
> names(turnover)
[1] "Report.Date"       "PersID"            "Status"            "DOB"
[5] "Age"               "Tenure"            "Current.Hire.Date" "Term.Date"
[9] "Gender"            "Function"          "Grade"             "Job.Category"
[13] "City"              "State"             "Retiree"           "Race"
> turnover_hiredate = sqldf("select Status, Current.Hire.Date from turnover")

我收到一条错误消息:没有这样的列:Current.Hire.Date。但是这个变量被列为第 7 个变量。

我做错了什么?

【问题讨论】:

    标签: r sqldf


    【解决方案1】:

    无需更改列名。

    从 RSQLite 1.0.0 和 sqldf 0.4-9 开始,列名中的点是没有的 更长的翻译为下划线。 https://code.google.com/p/sqldf/

    我们只需要在单引号之间写SQL语句,在双引号反引号/反引号之间包含点的列名可以互换.

    两个例子:

    require(sqldf)
    # 1
    turnover <- data.frame(Status = c("A", "B", "C"), 
                           Current.Hire.Date = c("4/10/10", "13/11/10", "1/7/13"))
    sqldf('select Status, "Current.Hire.Date" from turnover') 
    
    #2. Double quotes and backticks interchangeably    
    sqldf('select Species, avg("Sepal.Length") `Sepal.Length`, 
       avg("Sepal.Width") `Sepal.Width` from iris group by Species')
    

    实现解决方案的另一种方法

    #3 Using square brackets 
    sqldf('select Species, avg([Sepal.Length]) `Sepal.Length`, 
       avg([Sepal.Width])  `Sepal.Width` from iris group by Species')
    

    【讨论】:

      【解决方案2】:

      sqldf(...) 不喜欢列名中的.(句点),因此您需要将其更改为其他内容。试试这个:

      library(sqldf)
      turnover = read.csv("turnover.csv")
      colnames(turnover) <- gsub("\\.","_",colnames(turnover))
      turnover_hiredate = sqldf("select Status, Current_Hire_Date from turnover")
      

      原因是句号在 SQL 中用于表示表列,例如turnover.Status.

      【讨论】:

        【解决方案3】:

        你也可以使用

        library(sqldf)
        turnover <- read.csv("turnover.csv", header=TRUE, check.names=FALSE) #Leave Names Alone
        
        names(turnover) <- gsub(x = names(turnover),
                            pattern = " ",
                            replacement = "_")  # Replace Var Name blank with _
        

        【讨论】:

          猜你喜欢
          • 2017-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-23
          • 2011-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多