Ошибка: столбцы Tibble должны иметь одинаковую длину, только значения длины один перерабатываются: * Длина 61: столбец `y` * Длина 10358: столбец` x` - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь построить график распространения коронавируса в Индии и в остальном мире, используя приведенный ниже код R, в котором у меня есть corona_world в качестве информационного кадра и создан из него daily_confirmed dataframe. Я удалил все значения NA в столбце переменной «India» , Но, тем не менее, ошибка говорит о том, что она не имеет такой же длины. Я не понимаю, почему это не работает. Пожалуйста, помогите

Ошибка: столбцы Tibble должны иметь одинаковую длину, только значения длины один перерабатываются: * Длина 61: столбец y * Длина 10358: столбец x

daily_confirmed <- corona_world %>%
  dplyr::select(Confirmed) %>%
  dplyr::mutate(country = dplyr::if_else(corona_world$Country.Region == "India",
                                         "India",
                                         "Rest of the World")) %>%
  dplyr::group_by(corona_world$ObservationDate, country) %>%
  dplyr::summarise(total = sum(Confirmed, rm.na=TRUE)) %>%
  dplyr::ungroup() %>%
  tidyr::pivot_wider(names_from = country, values_from = total)

daily_confirmed <- daily_confirmed[-c(1:8),]
daily_confirmed %>%
  plotly::plot_ly() %>%
  plotly::add_trace(x = ~ corona_world$ObservationDate,
                    y = ~ India,
                    type = "scatter",
                    mode = "lines+markers",
                    name = "India") %>%
  plotly::add_trace(x = ~ corona_world$ObservationDate,
                    y = ~ Rest of the World,
                    type = "scatter",
                    mode = "lines+markers",
                    name = "Rest of the World") %>%
  plotly::layout(title = "",
                 legend = list(x = 0.1, y = 0.9),
                 yaxis = list(title = "Number of New Cases"),
                 xaxis = list(title = "Date"),
                 hovermode = "compare",
                 margin = list(b = 10,
                               t = 10,
                               pad = 2
                 ))

Ввод https://i.stack.imgur.com/R63v8.png

1 Ответ

1 голос
/ 02 апреля 2020

Помимо некоторых опечаток в вашем коде, ошибка связана с отображением corona_world$ObservationDate на x. Вы должны сопоставить ObservationDate с daily_confirmed на x. Кроме того, при использовании имен переменных с пробелами, как в «Остальном мире», вы должны указывать имя переменной в обратных чертах, например: «y = ~` Остальной мир` ".

Попробуйте это. Я проверил данные о пробелах, поэтому они должны работать. Кстати, я также пересмотрел ваш код, чтобы сделать его более кратким:

library(dplyr)
library(tidyr)
library(plotly)

daily_confirmed <- corona_world %>%
  #select(Confirmed) %>%
  mutate(country = dplyr::if_else(Country.Region == "India",
                                         "India",
                                         "Rest of the World")) %>%
  group_by(ObservationDate, country) %>%
  summarise(total = sum(Confirmed, rm.na=TRUE)) %>%
  ungroup() %>%
  pivot_wider(names_from = country, values_from = total)

daily_confirmed <- daily_confirmed[-c(1:8),]
daily_confirmed %>%
  plotly::plot_ly() %>%
  plotly::add_trace(x = ~ ObservationDate,
                    y = ~ India,
                    type = "scatter",
                    mode = "lines+markers",
                    name = "India") %>%
  plotly::add_trace(x = ~ ObservationDate,
                    y = ~ `Rest of the World`,
                    type = "scatter",
                    mode = "lines+markers",
                    name = "Rest of the World") %>%
  plotly::layout(title = "",
                 legend = list(x = 0.1, y = 0.9),
                 yaxis = list(title = "Number of New Cases"),
                 xaxis = list(title = "Date"),
                 hovermode = "compare",
                 margin = list(b = 10,
                               t = 10,
                               pad = 2
                 ))
...