Ошибка с левой строкой и именем столбца с точкой при использовании sqldf в R

Следующая таблица Employee взята из http://www.analyticsvidhya.com/blog/2015/12/sql-commands-common-excel-operations/. Код, следующий за таблицей, основан на примере 8B.

Employee <- structure(list(ECODE = c("A011", "A001", "A007"), DOJ = 
c("3-Jul-12", "12-Jun-12", "13-Aug-12"), Experience = c(2.1, 2.2, 2),
Gender = c("Male", "Male", "Female"), Department = c("Support", "Admin", 
"Support"), No_Of_Hours = c(17.42, 15.45, 13.54), Pay_Per_Hours = c(40L, 
45L, 44L), Total_Payout = c(696.8, 695.25, 595.72), City = c("Delhi", 
"Delhi", "Mumbai")), .Names = c("ECODE", "DOJ", "Experience", "Gender", 
"Department", "No_Of_Hours", "Pay_Per_Hours", "Total_Payout", "City"), 
row.names = c(NA, -3L), class = c("data.table", "data.frame"))

# Employee 
#     ECODE DOJ       Experience Gender  Department    No_Of_Hours 
# 1:  A011  3-Jul-12  2.1        Male    Support       17.42 
      Pay_Per_Hours
      40
# 2:  A001  12-Jun-12 2.2        Male    Admin         15.45            
      45
# 3:  A007  13-Aug-12 2.0        Female  Support       13.54            
      44
#     Total_Payout   City
# 1:  696.80         Delhi
# 2:  695.25         Delhi
# 3:  595.72         Mumbai

В примере 8B используется [LEFT(x,N)], но я обнаружил, что Leftstr (как использовать right/left для разделения переменной в sqldf, как в left(x,n)) это способ это делается в sqldf.

Поскольку в имени столбца нет специального символа (""."), операция работает должным образом.

sqldf("Select *, Leftstr(City,3) as 'City_Code' from Employee where
Department = 'Admin'")

#    ECODE  DOJ         Experience  Gender   Department  No_Of_Hours
# 1  A001   12-Jun-12   2.2         Male     Admin       15.45     
#    Pay_Per_Hours  Total_Payout  City   City_Code
#    45             695.25        Delhi  Del

В приведенном ниже примере, похожем на мой реальный набор данных, в имени столбца стоит точка, и ответ не ожидается.

sqldf("Select *, Leftstr('City.1',3) as 'City_Code' from Employee where 
Department = 'Admin'")

#    ECODE  DOJ         Experience  Gender   Department  No_Of_Hours
# 1  A001   12-Jun-12   2.2         Male     Admin       15.45     
#    Pay_Per_Hours  Total_Payout  City   City_Code
#    45             695.25        Delhi  Cit

Что нужно сделать с кодом sqldf, если в имени столбца для leftstr операций есть спецсимвол?


person iembry    schedule 20.07.2016    source источник
comment
Возможный дубликат Ошибка: нет такого столбца с использованием SQLDF   -  person zx8754    schedule 20.07.2016


Ответы (1)


Одинарные кавычки окружают константы. Чтобы сослаться на имя столбца, заключите его в двойные кавычки или квадратные скобки. Предположим, что столбец City вместо этого называется City.1:

sqldf("Select *, Leftstr([City.1],3) as 'City_Code' from Employee where 
  Department = 'Admin'")

давая:

  ECODE       DOJ Experience Gender Department No_Of_Hours Pay_Per_Hours
1  A001 12-Jun-12        2.2   Male      Admin       15.45            45
  Total_Payout City.1 City_Code
1       695.25  Delhi       Del
person G. Grothendieck    schedule 20.07.2016
comment
@ Г. Гротендик Спасибо за ответ и объяснение. - person iembry; 21.07.2016