преобразование числа в символ в sqldf

Я пытаюсь объединить 2 столбца кадра данных в R с помощью команды sqldf. Однако он рассматривает их как числовые и суммирует их. Я посмотрел на решение по аналогичному вопросу о stackoverflow, но оно все еще не работает для меня.

Вот как выглядит мой DF:

SP1  SP2
521  526
521  523

Я хочу:

SP
521-526
521-523

Я пробовал следующее:

sqldf("select  SP1 + '-' + SP2 as SP from DF")

Я также пробовал:

DF2 <- transform(DF, SP1 = as.character(SP1), SP2 = as.character(SP2)))
sqldf("select  SP1 + '-' + SP2 as SP from DF2")

В обоих случаях результат, который я получаю, будет

SP
1047
1044

Есть предположения?


person ah25    schedule 27.07.2015    source источник


Ответы (2)


Хотя это будет работать в SQL Server, вам придется использовать || вместо +, поскольку sqldf, скорее всего, использует серверную часть SQLite:

R> sqldf::sqldf(
    "SELECT SP1 || '-' || SP2 AS SP
     FROM df;"
  )
       SP
1 521-526
2 521-523

Данные:

df <- read.table(
  text = "SP1  SP2
  521  526
  521  523",
  header = TRUE
)
person nrussell    schedule 27.07.2015
comment
Спасибо, nrussell. Он работает с небольшим дополнением. На самом деле приведение не работает, и перед вашей командой я должен преобразовать эти столбцы в символы, как показано ниже: DF ‹- transform (DF, SP1 = as.character (SP1), SP2 = as.character (SP2))) - person ah25; 27.07.2015
comment
У меня options(stringsAsFactors = FALSE) в качестве настройки по умолчанию на моем компьютере, в то время как приведенный выше ответ работает нормально. - person nrussell; 27.07.2015
comment
Это зависит от того, имеет ли фрейм данных значения целые или числовые. Если числовой, вы получите ложные .0s. - person James; 27.07.2015

Если пакет RH2 загружен, sqldf по умолчанию будет использовать H2, и мы можем получить доступ к другим < href = "http://www.h2database.com/html/functions.html" rel = "nofollow"> функции, недоступные в SQLite:

В этом примере мы можем использовать CONCAT:

library(RH2)
library(sqldf
sqldf("SELECT CONCAT(SP1, '-' , SP2) AS SP FROM df")

Выход:

      SP
1 521-526
2 521-523

Если нам нужно преобразовать столбцы в символы:

# Using sqldf alone   
sqldf("SELECT CAST(SP1 as text) FROM df")
# RH2 loaded
sqldf("SELECT TO_CHAR(SP1) FROM df")
person mpalanco    schedule 28.07.2015