Решение:
Вы можете использовать paste
команду для конкатенации переменной и строки.
> library(sqldf)
> my_names <- names(sqldf("select * from iris limit 10"))
> sqldf(paste("select",my_names[1], "from iris limit 2", sep=" "))
Sepal_Length
1 5.1
2 4.9
или с помощью fn$
выполнить интерполяцию строки в последней строке могут быть написаны:
> fn$sqldf("select `my_names[1]` from iris limit 2")
Потенциальные проблемы:
Названия могут быть разными, когда вы пытаетесь используйте sqldf для запроса. Например, имена по умолчанию для набора данных iris
является:
> names(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
Однако имена должны быть отформатированы по-другому, когда вы пытаетесь использовать имена столбцов, чтобы сделать запросы:
> sqldf("select * from iris limit 1")
Sepal_Length Sepal_Width Petal_Length Petal_Width Species
1 5.1 3.5 1.4 0.2 setosa
Это official explaination:
Here is an example of sorting and limiting output from an SQL select statement on the iris data frame that comes with R. Note that although the iris dataset uses the name Sepal.Length the RSQLite layer converts that to Sepal_Length.
Так что причина в моей Soluti на я сначала создал переменную my_names
от sqldf
select statement вместо names(iris)
.
Определить «работы». Первый выглядит нормально, если Q10 является числовым столбцом в Customer. Предложите сделать свой пример воспроизводимым, предоставив 'dput (head (Customer))'. –
Это строковый столбец. Имя столбца - «Q10». Я получаю сообщение об ошибке: Ошибка в источнике ("~/Paul/R/DTA/Success rate123_2.R", echo = TRUE): ~/Paul/R/DTA/Success rate123_2.R: 3: 63: непредвиденная строковая константа 2: q <- "Q10" 3: pred01 = fn $ sqldf ('SELECT * FROM CustomerQ_totals123T WHERE' $ q '<$ fract * Q9 AND Total> -1 ORDER BY Total DESC ' ^ – paulkp
НИКАКИЕ из вышеуказанных работ – paulkp