【问题标题】:How to handle column names not supported by sqldf in R如何处理 R 中的 sqldf 不支持的列名
【发布时间】:2015-05-20 22:59:50
【问题描述】:

我有一个数据框,其中一些列名的格式为 .格式。例如:Company.1 当我在 sqldf 函数中使用该列时,它会引发错误

data=sqldf(select Company.1 from test)
Error in sqliteExecStatement(con, statement, bind.data) : 
RS-DBI driver: (error in statement: near ".1": syntax error)

任何解决方法,以便我可以按原样使用列名?

【问题讨论】:

    标签: r sqldf


    【解决方案1】:

    点在 SQL 中有另一个含义(例如,将表名与列名分开)和 在将数据发送到 SQLite 之前替换为下划线。

    library(sqldf)
    test <- data.frame( "Company.1" = 1:10 )
    sqldf( 'SELECT Company_1 FROM test' )
    

    【讨论】:

    • 一年后添加。请注意,最新版本的 RSQLite 不再将点替换为下划线。
    • @G.Grothendieck 那么如何处理这样的情况呢?
    • 将名称放在双引号中:sqldf( 'SELECT "Company.1" FROM test' )。这也有效:sqldf( 'SELECT [Company.1] FROM test' )
    • 我认为 [Company.1] 比“Company.1”更安全,因为如果您拼错“Company.1”,您不会收到未找到列的错误,它只会被解释为字符串(并且在 SQL "stringname1"
    【解决方案2】:

    这个问题是关于你的列名中的.,如果你把它改成Company_1就可以了:

    data = sqldf("select Company_1 from test")
    

    【讨论】:

      【解决方案3】:

      sqldf最新更新解决办法here回复

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

      【讨论】:

        猜你喜欢
        • 2021-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-15
        • 2016-11-23
        • 2015-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多