Ошибка: проблема с `mutate ()` вводом `gap`. x нечисловой аргумент для ввода двоичного оператора i

#r #dataframe #tidyverse

#r #фрейм данных #tidyverse

Вопрос:

Я новичок в R и работаю с набором данных gapminder, чтобы опробовать некоторые графики.

Этот набор данных является последними загруженными данными gapminder website , которые возвращают мне error on mutate where, поскольку gapminder данные из library(gapminder) этого не поступают.

df: gapminder_new

 gapminder_new %>%  
  select(country, "2010", "2019") %>%  head()

############## output ################
country 2010  2019
<chr>  <dbl>  <dbl>

Afghanistan 543 571     
Albania 4090    5210        
Algeria 4480    4710        
Andorra 40900   45900       
Angola  3590    3100        
Antigua and Barbuda 13000   15700   
 
  

Ошибка: ошибка при вычитании значений столбцов за год в gapminder_new df:

 gapminder_new %>%  
  select(country, "2010", "2019") %>% 
  mutate(gap = "2019" - "2010") %>% head() 

Error: Problem with `mutate()` input `gap`. x non-numeric argument to binary operator i Input `gap` is `"2019" - "2010"`. Run `rlang::last_error()` to see where the error occurred.
  

Но странная вещь, когда я использую gapminder data from library , а shaped to similar wider format затем у этого нет проблем:

df: библиотека (gapminder), тогда это работает

 library(gapminder)

gapminder %>%
  filter(year == 1967 | year == 2007) %>%
  select(country, year, lifeExp) %>%
  spread(year, lifeExp) %>%
  mutate(gap = `2007` - `1967`) %>% head()

#################### output #########################

country 1967  2007 gap
<fctr>  <dbl> <dbl> <dbl>

Afghanistan 34.020  43.828  9.808   
Albania 66.220  76.423  10.203  
Algeria 51.407  72.301  20.894
Angola  35.985  42.731  6.746   
Argentina   65.634  75.320  9.686
  

Оба набора данных выглядят одинаково, и я пытаюсь учесть разницу в годах, которая есть dbl во всех случаях, но она работает в одном случае, а не в другом.

Что здесь происходит, где я ошибаюсь и как мне это исправить?

Иногда эти небольшие проблемы с возвратами типов данных, которые визуально выглядят одинаково в R фреймах данных, действительно расстраивают.

Было нетрудно перейти с excel на python, как, похоже, при переходе с Python на R.

Ответ №1:

теперь он работает с использованием mutate(gap = .[["2019"]] - .[["2010"]] ) %>% head() , но я до сих пор не знаю, почему это требуется для работы в new gapminder dataset where, поскольку мне не нужно было использовать эту форму с library(gapminder) dataset