#r #sqldf
#r #sqldf
Вопрос:
У меня есть фрейм данных, подобный приведенному ниже:
df
ColA ColB
New|ME 7
New|You 8
ten 9
Aim|High 10
Ожидаемый результат:
ColA ColB First Second
New|ME 7 New ME
New|You 8 New You
ten 9 ten NA
Aim|High 10 Aim High
Как мне проанализировать ColA, используя sqldf, по разделителю |
?
Это была моя попытка, но я получил ошибку:
library(sqldf)
df1<- sqldf("SELECT * FROM df CROSS APPLY STRING_SPLIT([ColA], '|') ")
Error in result_create(conn@ptr, statement) : near "(": syntax error
Комментарии:
1. Погуглите функции sqlite , чтобы узнать, какие функции предоставляет SQLite. Также RSQLite предоставляет функции, перечисленные в
library(RSQLite); help("initExtension")
В этом случае вы должны быть в состоянии сделать это с помощьюinstr
иsubstr
.2. спасибо, это помогло получить мой ответ
Ответ №1:
df <- sqldf("SELECT *, SUBSTR([ColA], 1, INSTR([ColA],'|')-1) First FROM df")
df <- sqldf("SELECT *, SUBSTR([ColA], INSTR([ColA],'|') 1, Length([ColA])) Second FROM df")
df <- sqldf("SELECT ColA, ColB, First, Second FROM df")
Комментарии:
1. Предлагаю объединить все это в один
select
оператор. Также обратите внимание, что вы можете опустить 3-й аргумент вsubstr
, если хотите, чтобы все осталось.