sqldf、csv 和包含逗号的字段

2023-12-13

我花了一段时间才弄清楚这一点。我也是回答我自己的问题.

您有一些 .csv,您想要加载它fast,你想使用sqldf包裹。您常用的代码会被一些烦人的字段所困扰。例子:

1001,     Amy,9:43:00, 99.2
1002,"Ben,Jr",9:43:00, 99.2
1003,"Ben,Sr",9:44:00, 99.3

此代码仅适用于 *nix 系统。

library(sqldf)
system("touch temp.csv")
system("echo '1001, Amy,9:43:00, 99.2\n1002,\"Ben,Jr\",9:43:00, 99.2\n1003,\"Ben,Sr\",9:44:00, 99.3' > temp.csv")

如果尝试阅读

x <- read.csv.sql("temp.csv", header=FALSE)

R抱怨

Error in try({ : 
  RS-DBI driver: (RS_sqlite_import: ./temp.csv line 2 expected 4 columns of data but found 5)
  

The sqldf-FAQ.13解决方案也不起作用:

x <- read.csv.sql("temp.csv", filter = "tr -d '\"' ", header=FALSE)

R再次抱怨

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  line 1 did not have 5 elements

事实上,过滤器仅删除双引号。

那么,如何进行呢?


Perl 和正则表达式来救援。挖掘 SO,并玩弄正则表达式here,想出正确的一个并不难:

 s/(\"[^\",]+),([^\"]+\")/$1_$2/g

哪个匹配"...,...",这里的点不是双引号和逗号,而是用下划线替换逗号。 Perl 单行过滤器是传递给 sqldf 的正确过滤器:

x <- read.csv.sql("temp.csv", 
        filter = "perl -e 's/(\"[^\",]+)_([^\"]+\")/$1_$2/g'", 
        header=FALSE)

这是数据框x

> x
    V1       V2      V3   V4
1 1001      Amy 9:43:00 99.2
2 1002 "Ben_Jr" 9:43:00 99.2
3 1003 "Ben_Sr" 9:44:00 99.3

现在,DYO 琴弦上的化妆品......

EDIT:上面的正则表达式仅替换字段中第一次出现的逗号。要替换所有发生的情况,请使用此

s{(\"[^\",]+),([^\"]+\")}{$_= $&, s/,/_/g, $_}eg

有什么不同?

  1. 我替换了分隔符/ with {};
  2. 最后的选项 e 指示解析器将替换字段解释为 perl 代码;
  3. 替换是一个简单的正则表达式替换,替换所有“," with "_" 在匹配的子字符串中$&.

一个例子:

system("touch temp.csv")
system("echo '1001, Amy,9:43:00, 99.2\n1002,\"Ben,Jr,More,Commas\",9:43:00, 99.2\n1003,\"Ben,Sr\",9:44:00, 99.3' > temp.csv")

文件 temp.csv 如下所示:

1001,                 Amy,9:43:00, 99.2
1002,"Ben,Jr,More,Commas",9:43:00, 99.2
1003,            "Ben,Sr",9:44:00, 99.3

并且可以阅读

x <- read.csv.sql("temp.csv", 
       filter = "perl -p -e 's{(\"[^\",]+),([^\"]+\")}{$_= $&, s/,/_/g, $_}eg'", 
       header=FALSE)
> x
    V1                   V2      V3   V4
1 1001                  Amy 9:43:00 99.2
2 1002 "Ben_Jr_More_Commas" 9:43:00 99.2
3 1003             "Ben_Sr" 9:44:00 99.3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqldf、csv 和包含逗号的字段 的相关文章

  • 即使设置了语言环境,data.frames中的藏文字符也无法在R控制台中显示(中文可以,矩阵中的藏文可以)

    在 R 中 藏文字符位于 data frames 中时无法正确显示 gt Sys setlocale LC CTYPE Tibetan 1 Tibetan China 950 gt data frame a a 1
  • 如何在R中用随机数填充矩阵?

    expand grid i rexp 5 rate 0 1 它只创建一列 但有什么方法可以轻松地将其乘以 5 列吗 我的意思是 matlab 的做事方式 比如rand exp 0 1 10 20 创建一个指数分布随机数的矩阵 平均值为 0
  • 将表达式捕获为 R 中的函数体

    我正在尝试编写一个程序 该程序将表达式作为输入并返回一个以该表达式绑定作为其主体的函数 caller lt function expr params Function lt function params body env parent f
  • 如何解决这个错误--dbWriteTable()

    我成功连接到 MYSQL DB 并尝试将结果写回数据库 dbWriteTable con predicted min forecast min 其中 Forecast min 只是双精度向量 我收到此错误消息 函数 类 fdef mtabl
  • 将多个绘图合并为 gif

    我正在尝试使用 caTools 包将多个绘图组合成一个 gif 我的基本代码如下所示 for i in 1 100 plot plots few points and lines changes slightly with each i 我
  • Foreach Parallel - 多个输出的组合功能

    我有一组 45000 个用户和 40 多部电影的评分 我需要根据每个用户与其他用户的皮尔逊相关性来预测每个用户的新评分 我还需要存储相似用户的集合以及每个用户 电影组合的相似性 我使用 foreach 包并行执行循环 我设法编写的代码是这样
  • data.table 对数字和文本变量分别进行分组

    我正在尝试简化这个data table作用于数字变量和字符变量的两阶段过程 例如 取第一个元素textvar and sum每个数值变量 考虑这个小例子 library data table dt lt data table grpvar
  • 只保留矩阵中某些列具有相同元素的行

    让我举个例子 假设我们有 3 个表 重点关注 N 列 Table 1 Table 2 Table 3 N Values N Values N Values 5 1 5 1 5 1 10 2 6 2 6 21 15 3 10 3 10 5 1
  • 将误差线添加到多条线上以在 R 中的绘图上显示标准差

    我有一个包含许多不同线条的图 我想为每条线上的每个点添加误差线 df lt matrix runif 25 5 5 plot 1 5 seq 0 1 1 4 type n mapply lines as data frame df col
  • 如何在Shiny中动态生成的条件面板中格式化条件?

    我正在尝试使用 for 循环在 Shiny 中创建小部件 每个块包含 label 复选框 选择选择器 两个数字输入 我想根据复选框的值和选择选择器的值来设置显示或隐藏两个数字输入的条件 在我创建的 for 循环中 我为每个小部件变量添加了一
  • 将 R 中的 arules 生成的规则应用于新交易

    我的目标是使用 R 包生成的规则arules来预测topic每个事务 每个事务有 1 个主题 其中每个事务是文档中的一组单词 我有一个训练集trans train 用于创建规则 和测试集trans test 我想预测它的 主题 我还希望能够
  • 将多个对齐的绘图放置在一页上时避免浪费空间

    我想将四个图放在一个页面上 轴标签应仅打印在最边缘 即x仅用于底部图表的轴标签 以及y仅左图的轴标签 这既适用于整个轴的名称 也适用于各个刻度线 我可以使用以下代码生成一些内容 pdf file ExampleOutput pdf widt
  • 如何从闪亮模块调用闪亮模块?

    如何从闪亮模块中调用闪亮模块并传递第一个模块中的选择 作为一个例子 我编写了一个应用程序来显示星球大战主题dplyr在 DT data 表中 模块StarWars 来自同一数据集的相关电影应显示在另一个子选项卡 模块电影 的另一个 DT d
  • 在 R 中将列表列表转换为数据帧:Tidyverse 方式

    我正在寻找将列表列表转换为 R 中的数据帧的 Tidyverse 方法 Create a list of lists a lt seq 1 10 1 b lt seq 1 20 2 Function to calculate the sum
  • 如何调整ggplot2中的标题位置

    这是代码 require ggplot2 require grid pdf a pdf png a png a lt qplot date unemploy data economics geom line opts title A b l
  • 在字符串中每个字母后面添加数字

    我有几个具有固定格式的字符串 格式为一个字母后跟一个数字 例如 A3B1C7D1 但是 如果字母后面的数字为 1 则字符串将写为 A3BC7D 我想做的是插入数字 1 然后将字符串转换为A3BC7D to A3B1C7D1 我的示例数据是
  • 修改 GGplot2 对象

    然而 我很好奇 是否可以添加任何特定的图例或将哪个物种对应于观察到的预期绘图中 以分别知道它是哪个圆圈 我目前使用的是一个名为 finches 的假数据集 该包称为 cooccurr 它创建一个 ggplot 对象 我很好奇如何实际编辑它以
  • 如何选择独特点

    我是一名 R 程序员新手 我有以下一系列观点 df lt data frame x c 1 2 3 4 y c 6 3 7 5 df lt df gt mutate k 1 df lt df gt full join df by k df
  • R:变换不规则时间字符串

    我有两个不同的时间序列 来自不同的数据帧 具有不同的不规则格式 但问题是相同的 我只想提取小时 分钟 秒和毫秒 时代系列看起来像这样 ts1 08 27 23 445 08 27 24 280 08 27 25 115 I tried st
  • Shiny 中的模态对话框:可以调整宽度但不能调整高度

    在我的 Shiny 应用程序中 我有几个来自闪亮BS 包的模式窗口 我可以像这样调整这些模式窗口的宽度 tags head tags style HTML modal lg width 1200px abs 1 background col

随机推荐

  • 使用 Java MongoDb 驱动程序进行 Bson 漂亮打印

    我正在使用 Mongo 聚合框架 该框架使用 Java MongoDB 驱动程序版本 3 3 我有一个聚合管道 这只是类型的集合List
  • 将 ctypes 与 jython 一起使用

    我在 python 脚本中使用 ctypes lib 时遇到问题 这是我的代码 在互联网上找到 if name main from ctypes import user32 windll user32 kernel32 windll ker
  • Windows Phone 8.1 Silverlight 和 XAML

    有什么方法可以将 XAML 控件添加到我的 WP 8 1 Silverlight 应用程序中吗 我想使用进度环和切换开关 但似乎 Silverlight 没有它们 我怎样才能添加它们 顺便说一句 添加 使用 Windows UI Xaml
  • 文件夹未推送到 GitHub,仅显示为图标

    我试图添加我的OnlineStore文件夹到GitHub其中有两个主要文件夹 AServerApp and a ClientApp 不知道我做错了什么 ClientApp 文件夹看起来像这样 我什至无法单击它进入内部 这也是它的实际链接 h
  • 为什么gcc使用movl而不是push来传递函数参数?

    注意这段代码 include
  • CSS 边框小于 1px [重复]

    这个问题在这里已经有答案了 可能的重复 HTML 子像素边框 默认border 1px太大了 然而 border 0 5px solid 不管用 有没有一种 CSS 解决方案可以使边框大小减半 像素是渲染物体的最小单位值 但是您可以通过修改
  • sencha touch 消息框不可点击

    在 sencha touch 中 我们在消息框方面遇到了一些问题 看起来是android 4 3的东西 在大多数设备上它都可以完美工作 但在 Android 4 3 的设备上 当用户按下按钮时 消息框不会消失 Ext define Test
  • addChildViewController 实际上做了什么?

    我刚刚第一次涉足 iOS 开发 我要做的第一件事就是实现一个自定义容器视图控制器 我们称之为SideBarViewController 交换它显示的几个可能的子视图控制器中的哪一个 几乎与标准完全相同标签栏控制器 这几乎是一个标签栏控制器但
  • HTML:防止 POST 表单的 url 编码

    我有一个 HTML 表单 必须将其发布到 URL 我希望表单能够发布一个名为 DATA 的变量 如下所示 DATA somevar someval somevar2 someotherval 我在做这件事时遇到了麻烦 看来默认情况下 会对数
  • iOS 的免费语音识别引擎?

    我正在寻找一些免费的语音识别引擎来在我的 iPhone 应用程序中使用 你能推荐吗 Nuance 刚刚为开发人员打开了大门龙移动SDK 他们是行业领导者 看一下NDEV 移动
  • Swift 3.0 和 Xcode 8 迁移后未调用 UITableViewDelegate 方法

    将我的代码库从 Swift 2 2 迁移到 Swift 3 0 后 我注意到我的UITableView页脚没有显示 事实证明我的都没有UITableViewDelegate方法被调用 例如 func tableView tableView
  • 如何从 PHP 解析以文本/xml 形式发送到服务器的 XML?

    我有一个用 jQuery 编写的客户端脚本 它将文本 xml 数据发送到服务器 但我不知道如何解析请求 因为数据不是查询字符串变量 jQuery 看起来像这样 jQuery ajax url test php type POST proce
  • Jetty 9 及更高版本中的 SelectChannelConnector 替代类

    jetty 9及以上版本的SelectChannelConnector的替代类是什么 另外 SelectChannelConnector 类有什么用 连接器类在 jetty servlet 架构中有何用途 我们可以使用 ServerConn
  • Python正则表达式提取日期

    我的字符串看起来像这样 server date YYYYMMDD int server date MON DAY YYYY int 还有更多 不同的日期格式 此外 可以有任意数量的 块 并且它们可以以任意顺序出现 我试图获取 Python
  • 如何通过 Docusign API 将动态图像添加到 Docusign 文档

    我不知道 Docusign API 是否可以实现这一点 但我很好奇是否可以将动态图像添加到模板文档中 此动态图像的目的是根据发送者的身份为文档设置徽标 我知道 Docusign 有品牌 但我们希望此图像位于模板文档的特定位置 如果有人知道这
  • 1 到 100 之间的正则表达式编号

    我搜索了很多 找不到这个 RegExp 的解决方案 我不得不说我在 Reg Expressions 方面不是很有经验 Regex 1 9 0 9 1 100 我想测试一个数字1 到 100 之间 不包括 0 Try 1 9 0 9 100
  • 参数类型可能存在的时间不够长

    我有一个简单的程序 我试图实现多态帐户类型 enum AccountType INVALID TYPE1 TYPE2 trait Account fn get name self gt String fn get type self gt
  • JToken.WriteToAsync 不写入 JsonWriter

    我正在尝试创建一个以某种方式更改请求的中间件 我能够阅读它并更改内容 但我无法弄清楚如何正确设置流编写器来创建新的正文 当我打电话时normalized WriteToAsync jsonWriter the MemoryStream仍然是
  • VS2017 和 VS2015 应用程序与 dll 之间的官方二进制不兼容性是否准确?

    TL DR MS 文档指出 VS2015 和 VS2017 库之间的二进制兼容性是one way 虽然我认为这必然是双向的 问题在哪里 首先 背景 任何 MSVC 构建的库都是正式二进制兼容VS2015 和 VS2017 之间 具体来说 您
  • sqldf、csv 和包含逗号的字段

    我花了一段时间才弄清楚这一点 我也是回答我自己的问题 您有一些 csv 您想要加载它fast 你想使用sqldf包裹 您常用的代码会被一些烦人的字段所困扰 例子 1001 Amy 9 43 00 99 2 1002 Ben Jr 9 43