微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当col可能丢失时R sqldf SELECT

如何解决当col可能丢失时R sqldf SELECT

我有许多.csv文件。某些列显示在所有文件中,而另一些仅显示在某些文件中。我也不想有其他许多列。

我正在使用R sqldf遍历.csv文件,选择所需的列,并将其写入新的.csv文件。但是,我不知道如何告诉sqldf在某些.csv文件中可能找不到某些列,在这种情况下,无论如何我都希望它创建它(即使它为空白)。

在下面的示例中,列userlocation1仅出现在某些.csv文件中。因此,如果文件没有文件,该代码将不起作用。

我尝试了try-catch,但这只是导致某些文件根本没有被处理。

for (fileNumber in fileNumbers){
  newfileName <- paste(sub(paste("\\.",sep = ""),"",fileNames[fileNumber]),"-clean",".csv",sep = "")
  tx <- paste(readLines(fileNames[fileNumber],encoding="UTF-8"),collapse="%%%")  
  tx_as_table <- fread(text = tx,header = TRUE,sep = ",",nrows = 501,stringsAsFactors = FALSE,fill = TRUE,select = 1:50)  
  dfmediaurl <- sqldf('select created_at,text,id_str,in_reply_to_status_id,username1,userscreen_name1,userlocation1 from tx_as_table')
  write.table(x = dfmediaurl,file = newfileName,append = FALSE,quote = TRUE,sep 
              = ";",row.names = FALSE,col.names = TRUE)
  
}


解决方法

要引用所有列,请使用本示例中的*和内置anscombe数据框:

sqldf("select * from anscombe limit 3")
##   x1 x2 x3 x4   y1   y2    y3   y4
## 1 10 10 10  8 8.04 9.14  7.46 6.58
## 2  8  8  8  8 6.95 8.14  6.77 5.76
## 3 13 13 13  8 7.58 8.74 12.74 7.71

或仅显示某些列,以使表中可能没有某些列,然后intersect将列名与表中实际存在的列名创建要使用的列名的字符向量,请将其转换为逗号分隔使用toString的字符串,并将其插入到SQL语句中。请注意,fn$必须前缀sqldf才能启用字符串插值。 verbose=TRUE还将显示正在运行的SQL语句(即,它还将显示下面以sqldf:开头的输出行-请注意,输出中的倒数第二sqldf:行显示了生成的SQL语句):

# use those columns among x3,x4 and x5 that are in anscombe
cols <- toString(intersect(c("x3","x4","x5"),names(anscombe)))

fn$sqldf("select $cols from anscombe limit 3",verbose = TRUE)
## sqldf: library(RSQLite)
## sqldf: m <- dbDriver("SQLite")
## sqldf: connection <- dbConnect(m,dbname = ":memory:")
## sqldf: initExtension(connection)
## sqldf: dbWriteTable(connection,'anscombe',anscombe,row.names = FALSE)
## sqldf: dbGetQuery(connection,'select x3,x4 from anscombe limit 3')
## sqldf: dbDisconnect(connection)
##   x3 x4
## 1 10  8
## 2  8  8
## 3 13  8

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?