Разбор по разделителю с помощью sqldf

#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 , если хотите, чтобы все осталось.