Выбор и построение дополнительного столбца из фрейма данных внутри функции, R - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь построить линейный график с помощью ggplot, используя функцию, которую я называю трендами. Я хочу иметь возможность выбрать любой столбец из моего df при передаче его в мою функцию по отношению к параметрам фиксированного столбца и выбрать страну. Ниже приведен код ...

trends <- function(country, col){
#filtering the specified country of interest and selecting fixed columns, plus optional column to go with them.
my_data =  df %>% dplyr::filter(Countries == 'country') %>% 
select(col = paste0('col'), day, month) 
my_plot = ggplot(my_data, aes(x=day,  y=col)) + geom_line() + facet_wrap(~month)
              print(my_plot)
            }
            trends('Cameroon',  col='CFR')

, но я получаю эту ошибку ...

Error: Can't subset columns that don't exist.
x Column `col` doesn't exist.

Пожалуйста, помогите. Я пробовал другой вариант ответа на аналогичный сценарий ios, но безрезультатно.

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Лично я предпочел бы аккуратный eval. Однако основная проблема заключается в том, что вы помещаете кавычки вокруг ваших переменных country и col внутри тела вашего развлечения. Попробуйте следующее:

trends <- function(country, col){
    #filtering the specified country of interest and selecting fixed columns, plus     optional column to go with them.
    my_data =  df %>% dplyr::filter(Countries == country) %>% 
    select(col = col, day, month) 
    my_plot = ggplot(my_data, aes(x=day,  y=col)) + geom_line() + facet_wrap(~month)
    print(my_plot)
}
trends('Cameroon',  col='CFR')

Используя набор данных gapminder в качестве примера набора данных:

library(ggplot2)
library(dplyr)

df <- gapminder::gapminder %>% 
  rename(Countries = country)

trends <- function(country, col) {
  #filtering the specified country of interest and selecting fixed columns, plus optional column to go with them.
  my_data =  df %>% dplyr::filter(Countries == country) %>% 
    select(col = col, year, continent)#, day, month) 
  #my_plot = ggplot(my_data, aes(x=day,  y=col)) + geom_line() + facet_wrap(~month)
  my_plot = ggplot(my_data, aes(x=year,  y=col)) + geom_line() + facet_wrap(~continent)
  print(my_plot)
}

trends('Cameroon',  col='lifeExp')

1 голос
/ 19 июня 2020

Поскольку вы используете ввод символов в качестве аргументов функции, вы можете использовать !! sym(col) там, где это необходимо. Однако я не уверен, где подходят «дополнительные, необязательные столбцы». Где на вашем графике их следует использовать. Вам нужно будет дать лучший пример того, что вы имеете в виду.

trends <- function(country, col){
  my_data =  df %>% dplyr::filter(Countries == country) %>% 
    select(!! sym(col), day, month) 
  my_plot = ggplot(my_data, aes(x=day,  y= !! sym(col))) +
    geom_line() +
    facet_wrap(~ month)
  print(my_plot)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...