2016-07-20 1 views
1

Сотрудник стол от http://www.analyticsvidhya.com/blog/2015/12/sql-commands-common-excel-operations/. Код, который следует за таблицей, основан на примере 8B.Ошибка с именем leftstr и column с периодом с использованием sqldf в R

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 

В примере 8В [LEFT (х, N)] используется, но я обнаружил, что LeftStr (how to use right/left to split a variable in sqldf, as in 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 операций?

+0

Возможного дубликат [Error: No Such Колонка с помощью SQLDF] (http://stackoverflow.com/questions/23451139/ error-no-such-column-using-sqldf) – zx8754

ответ

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 
+0

@ G. Grothendieck Спасибо за ответ и объяснение. – iembry