R中的Sqldf - 第一列名称错误

标签 sql r excel sqldf

每当我使用 read.csv.sql我无法从第一列中进行选择,并且代码的任何输出都会在第一列名称的开头放置一个不寻常的字符(A(波浪号)-..)。

所以假设我在 Excel 中创建了一个看起来像这样的 df.csv 文件

df = data.frame(
  a = 1, 
  b = 2, 
  c = 3, 
  d = 4)

然后,如果我使用 sqldf 查询工作目录中的 csv,我会收到以下错误:
> read.csv.sql("df.csv", sql = "select * from file where a == 1")
Error in result_create(conn@ptr, statement) : no such column: a

如果我查询与第一列不同的列,我会得到一个结果,但会输出异常字符,如下所示
df <- read.csv.sql("df.csv", sql = "select * from file where b == 2")
View(df)

I get the this table

知道如何防止将这些字符添加到第一列名称吗?

最佳答案

问题可能是您有一个大于 R 可以处理的文件,因此只想将行的子集读入 R 并指定过滤它的条件涉及引用名称困惑的第一列,这样您就可以不要使用它。

这里有两种替代方法。第一个涉及更多代码,但具有 100% R 的优点。第二个只是一个语句,也使用 R,但还使用了外部实用程序的 an。

1) 跳过标题跳过标题读取文件。这将导致列被标记为 V1 , V2等并使用 V1在条件。

# write out a test file - BOD is a data frame that comes with R
write.csv(BOD, "BOD.csv", row.names = FALSE, quote = FALSE)

# read file skipping over header
DF <- read.csv.sql("BOD.csv", "select * from file where V1 < 3", 
  skip = 1, header = FALSE)

# read in header, assign it to DF and fix first column
hdr <- read.csv.sql("BOD.csv", "select * from file limit 0")
names(DF) <- names(hdr)
names(DF)[1] <- "TIME"  # suppose we want TIME instead of Time

DF
##   TIME demand
## 1    1    8.3
## 2    2   10.3

2) 过滤器另一种方法是使用 filter=争论。这里我们假设我们知道列名的结尾是 ime但在此之前还有其他我们不知道的角色。这假设 sed可用并且在您的路径上。如果您在 Windows 上安装 Rtools 以获取 sed .根据您的外壳,可能需要更改引用。

在 Windows 上尝试此操作时,我注意到 sed从 Rtools 更改了行尾,因此我们在下面指定了 eol=以确保正确处理。你可能不需要那个。
DF <- read.csv.sql("BOD.csv", "select * from file where TIME < 3", 
  filter = 'sed -e "1s/.*ime,/TIME,/"' , eol = "\n")
DF
##   TIME demand
## 1    1    8.3
## 2    2   10.3

关于R中的Sqldf - 第一列名称错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55130587/

相关文章:

Excel 2016 : How to find out the row number of a max value?

excel - 如何使用 excel 宏将条件格式应用于多列

SQL:根据多个条件连接的目的/好处是什么?

Mysql - 计算它在没有 groupby 子句的情况下工作

MySQL 将行合并为列

从 Hmisc 包的summary()生成的交叉表中的行百分比

VBA Excel 使用表名检查特定表是否存在

sql - 用 SQL 计算成绩

c++ - 在没有特定 IDE 的 Windows 7 中使用 Rcpp 和 RInside

r - ggplot优先考虑线重叠