R 通过定界器sqldf进行解析

R 通过定界器sqldf进行解析,r,sqldf,R,Sqldf,我有一个如下所示的数据帧: Col1 Col2 123,bnh12,1242,mdmdmd 8 0923,3mdn42,76,ieieie 10 如何通过逗号,解析此数据集,并在sqldf中获得如下所示的预期输出 Col1 Col2 NewCol NewCol2 123,bnh12,1242,mdmdmd 8 123 123 0

我有一个如下所示的数据帧:

                 Col1     Col2
123,bnh12,1242,mdmdmd        8
0923,3mdn42,76,ieieie       10
如何通过逗号
解析此数据集,并在sqldf中获得如下所示的预期输出

                 Col1     Col2    NewCol    NewCol2   
123,bnh12,1242,mdmdmd        8       123        123
0923,3mdn42,76,ieieie       10      0923         76
我能够得到NewCol的第一个号码,但无法计算NewCol2:

df1 <- sqldf("SELECT *, SUBSTR([Col1], 1, INSTR([Col1],',')-1) [NewCol] FROM df")

df1
df对于
NewCol1
使用问题中的代码,对于
NewCol2
使用
strFilter
删除所有非逗号或数字的字符。然后修剪两端的数字,然后修剪两端的逗号。然后从左侧修剪更多数字,然后从左侧修剪逗号

library(sqldf)

sqldf("select *,
 SUBSTR(Col1, 1, INSTR([Col1], ',') - 1) NewCol1,
 ltrim(ltrim(trim(trim(strFilter(Col1, ',0123456789'), '0123456789'), ','), 
   '0123456789'), ',') NewCol2
 from df")
给予:

                   Col1 Col2 NewCol1 NewCol2
1 123,bnh12,1242,mdmdmd    8     123    1242
2 0923,3mdn42,76,ieieie   10    0923      76
h2数据库 上面使用的是默认的RSQLite后端,但是如果我们使用RH2后端,那么我们有更多的字符串操作函数可以使用:

library(sqldf)
library(RH2)  # sqldf will notice this is loaded and use it

sqldf("SELECT *, 
       regexp_replace(Col1, ',.*', '') NewCol1,
       regexp_replace(Col1, '^[^,]*,[^,]*,|,[^,]*$', '') NewCol2
       FROM df")

您真的需要在sqldf中执行此操作吗?我能想到一个was,但它看起来糟透了。使用普通的R正则表达式会容易得多。我也想出了一个难看的解决办法。它需要在sqldf中,因为我必须将我的代码转移到另一个团队,并且我可以处理这些数据的唯一环境是在R中,我将提供我所拥有的
library(sqldf)
library(RH2)  # sqldf will notice this is loaded and use it

sqldf("SELECT *, 
       regexp_replace(Col1, ',.*', '') NewCol1,
       regexp_replace(Col1, '^[^,]*,[^,]*,|,[^,]*$', '') NewCol2
       FROM df")