错误:没有使用SQLDF的此类列

时间:2014-05-04 00:08:28

标签: r sqldf

以下是脚本

> 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个变量。

我做错了什么?

3 个答案:

答案 0 :(得分:10)

无需更改列名。

  

从RSQLite 1.0.0开始,列名称中的sqldf 0.4-9点为no   更长时间翻译成下划线。 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')

答案 1 :(得分:5)

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

答案 2 :(得分:0)

您也可以使用

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 _