Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的Sqldf-第一列名称错误_Sql_R_Excel_Sqldf - Fatal编程技术网

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

R中的Sqldf-第一列名称错误,sql,r,excel,sqldf,Sql,R,Excel,Sqldf,每当我使用read.csv.sql时,我无法从第一列中选择,并且代码的任何输出都会在第一列的名称处放置一个不寻常的字符(A(tilde)-…) 因此,假设我在Excel中创建了一个df.csv文件,看起来像这样 df = data.frame( a = 1, b = 2, c = 3, d = 4) 然后,如果我使用sqldf查询工作目录中的csv,则会出现以下错误: > read.csv.sql("df.csv", sql = "select * from fil

每当我使用
read.csv.sql
时,我无法从第一列中选择,并且代码的任何输出都会在第一列的名称处放置一个不寻常的字符(A(tilde)-…)

因此,假设我在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)

df问题可能是您有一个大于R所能处理的文件,因此您只想将一部分行读入R,并指定过滤条件,方法是引用名称混乱的第一列,因此无法使用它

这里有两种替代方法。第一个语句包含更多的代码,但其优点是100%R。第二个语句只是一条语句,也使用R,但另外使用了一个外部实用程序

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

所以我通过阅读上面的评论就明白了


我在使用Excel for Office 365的Windows 10计算机上。通过将我保存文件的方式从“CSV UTF-8(逗号分隔)”更改为“CSV(逗号分隔)”,特殊字符将消失。

检查编码如果这是唯一的问题(并且您无法或不愿意解决编码问题,如果是这样),那么您可以始终使用
colnames(x)覆盖列名谢谢你的回复。通过阅读链接,我意识到这就是我在excel中保存文件的方式,通过将CSV UTF-8更改为CSV,它删除了字符,我可以像往常一样查询第一列。感谢您的详细回复。事实上,我已经知道了如何将角色完全移除,但如果我不能做到这一点,我会使用你的方法。
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