只保留RSQLite列中的第一个字

只保留RSQLite列中的第一个字,r,rsqlite,R,Rsqlite,我正在将SQL代码传输到R 我有一个数据集,想从新列的列中提取第一个单词 数据集 df Col_A ColB ABC JEn JDn 9 nemmdn mend 10 pwek ne me ne 12 预期产出: Col_A ColB Col_A_Abbreviation ABC JEn JDn 9 ABC nemmdn mend 10

我正在将SQL代码传输到R

我有一个数据集,想从新列的列中提取第一个单词

数据集

 df

        Col_A    ColB
  ABC JEn JDn       9
  nemmdn mend      10
pwek ne me ne      12
预期产出:

        Col_A    ColB    Col_A_Abbreviation
  ABC JEn JDn       9                   ABC
  nemmdn mend      10                nemmdn
pwek ne me ne      12                  pwek
以下是我目前的情况:

library(DBI)
library(RSQLite)
mydb <- dbConnect(RSQLite::SQLite(), "")
dbWriteTable(mydb, "df_1", df)

dbGetQuery(mydb, 
'SELECT IF(INSTRB(Col_A, \' \', 1, 1) >0, 
SUBSTR(Col_A, 1, INSTRB(Col_A, \' \', 1, 1) - 1), 
Col_A) AS Col_A_Abbreviation FROM df_1')

RSQLite对它可以使用的函数有限制吗?

除了Clemsang的评论之外,为什么不在从数据集获得结果后使用strsplit呢

大概是这样的:

a <- c("ABC Jen JDn", "nemmdn mend", "pwek ne me ne")
b <- sapply(strsplit(a, " "), "[", 1)
1 sqldf/RSQLite如果您使用的是SQLite后端,那么您只能使用RSQLite支持的函数。在末尾注释中重复定义df时,尝试此方法

library(sqldf)
sqldf("select 
    *, 
    substr([Col_A], 1, instr([Col_A], ' ') - 1) FirstWord 
  from df")
给予:

          Col_A ColB FirstWord
1   ABC JEn JDn    9       ABC
2   nemmdn mend   10    nemmdn
3 pwek ne me ne   12      pwek
1a如果条目只能包含一个单词,则在末尾添加空格,以确保始终至少有一个空格可匹配

sqldf("select 
    *, 
    substr([Col_A], 1, instr([Col_A] || ' ', ' ')-1) FirstWord 
  from df")
2基R

在base R中,删除第一个空格及其后的所有内容:

transform(df, FirstWord = sub(" .*", "", Col_A))
笔记
SQLite使用case谢谢,当我这样做时,现在它在结果中显示错误_createconn@ptr,statement:near AS:syntax error谢谢,我需要在SQL中完成,但不幸的是,您应该像Clemsang建议的那样在查询中添加大小写。请看这里:
transform(df, FirstWord = sub(" .*", "", Col_A))
df <-
structure(list(`Col_A` = c("ABC JEn JDn", "nemmdn mend", "pwek ne me ne"
), `ColB` = c(9L, 10L, 12L)), class = "data.frame", row.names = c(NA, 
-3L))