с данными, как показано ниже
text = "
date,a,b
12/2/2019,18.1,0.017741935
12/2/2019,18.2,0.020967742
12/9/2019,16.7,0.020322581
12/9/2019,16.9,0.019677419
12/3/2019,18.1,0.017741935
12/3/2019,18.8,0.020967742
12/10/2019,16.2,0.020322581
12/10/2019,16.1,0.019677419
"
df1 = read.table(textConnection(text), sep=",", header = T)
Необходимо выполнить аналогичную операцию на нескольких похожих фреймах данных, но с разными именами столбцов, поэтому функция имеет смысл. Функция создает диаграмму рассеяния двух переменных, используя dplyr
и ggplot
, как показано ниже.
dplyrGgFn = function(df, colNameX, colNameY) {
# get average Y value for each x value point to be used
df = df %>%
select(colNameX, colNameY) %>%
mutate(colNameX = round(colNameX,0)) %>%
group_by(colNameX) %>%
summarise(colNameY = mean(colNameY))
#
return(
ggplot(df, aes_string(x=colNameX, y=colNameY)) +
geom_point(aes(color = "blue"))
)
}
И вызывает как dplyrGgFn(df1, "a", "b")
Очевидно, эта функция выдает ошибку, и, как вы можете см. проблема с доступом к переменным имени столбца, переданным в виде строк при вызове функции.
Error in round(colNameX, 0) :
non-numeric argument to mathematical function
каков рекомендуемый подход к обработке строк, переданных в качестве аргументов для имен столбцов? ищу общий c ответ, поскольку он может быть применим для нескольких случаев.
Обновление:
пользователь @Onyambu прокомментировал, что в качестве начальной версии используется нефункциональная версия точка - добавление этого.
df1 = df1 %>%
select(a, b) %>%
mutate(a = round(a,0)) %>%
group_by(a) %>%
summarise(b = mean(b))
ggplot(df1, aes(x=a, y=b)) +
geom_point(aes(color = "blue"))