Преобразовать фрейм данных в другой, чтобы иметь возможность строить графики с рекламным щитом - PullRequest
0 голосов
/ 10 марта 2020

Я хочу преобразовать этот фрейм данных «dataInit» в этот «dataFinal», мне нужно это, чтобы иметь возможность строить графики с рекламным щитом, это упражнение, чтобы посмотреть, сможете ли вы помочь мне с любым кодом. Обратите внимание, что в 2014 году Гавана не сообщала значение, но в последнем кадре она имеет 0

date <- c(2012,2012,2012,2013,2013,2013,2014,2014)
place <- c('Paris','Habana','London','Paris','Habana','London','Paris','London')
acc <- c(100,99,100,98,70,80,100,80)
dataInit <- data.frame(date,place,acc)

date <- c(2012,2013,2014)
Paris <- c(100,98,100)
Habana <- c(99,70,0)
London <- c(100,98,80)
dataFinal <- data.frame(date,Paris,Habana,London)

1 Ответ

1 голос
/ 10 марта 2020

Используйте pivot_wider для преобразования данных из длинного в широкое и установите values_fill, чтобы указать, какие пропущенные значения должны быть заполнены.

library(tidyr)

dataInit %>%
  pivot_wider(names_from = place,
              values_from = acc,
              values_fill = list(acc = 0))

# # A tibble: 3 x 4
#    date Paris Habana London
#   <dbl> <dbl>  <dbl>  <dbl>
# 1  2012   100     99    100
# 2  2013    98     70     80
# 3  2014   100      0     80

Другое решение без внешнего пакета:

dataFinal <- reshape(dataInit, timevar = "place", idvar = "date", direction = "wide")
dataFinal[is.na(dataFinal)] <- 0
dataFinal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...