只保留 RSQLite 列中的第一个字
Keep only first word in Column 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 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')
这是我的错误信息:
Error in result_create(conn@ptr, statement) : no such function: IF
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) 如果可以有只有一个单词的条目,则在末尾附加一个 space 以确保始终至少有一个 space 来匹配。
sqldf("select
*,
substr([Col_A], 1, instr([Col_A] || ' ', ' ')-1) FirstWord
from df")
2) 基础 R
在 base R 中删除第一个 space 及其后的所有内容:
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))
我正在努力将 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')
这是我的错误信息:
Error in result_create(conn@ptr, statement) : no such function: IF
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) 如果可以有只有一个单词的条目,则在末尾附加一个 space 以确保始终至少有一个 space 来匹配。
sqldf("select
*,
substr([Col_A], 1, instr([Col_A] || ' ', ' ')-1) FirstWord
from df")
2) 基础 R
在 base R 中删除第一个 space 及其后的所有内容:
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))