Обратный инжиниринг, накопленный к ежедневным данным? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть фрейм данных, для которого у меня есть данные даты и кумулятивный счет. Я пытаюсь сделать перестановку cumsum , чтобы получить ежедневные подсчеты , но также получает подсчеты по группам. Я пытаюсь go из кадра данных A в кадр данных B. Я использую R и tidyr.

Вот код:


df <- data.frame(cum_count = c(5, 14, 50, 5, 14, 50),
                 state = c("Alabama", "Alabama", "Alabama", "NY", "NY", "NY"),
                 Year = c(2012:2014, 2012:2014))

Dataframe A
  cum_count   state Year
1         5 Alabama 2012
2        14 Alabama 2013
3        50 Alabama 2014
4         5      NY 2012
5        14      NY 2013
6        50      NY 2014
Dataframe B
  cum_count   state Year
1         5 Alabama 2012
2         9 Alabama 2013
3        36 Alabama 2014
4         5      NY 2012
5         9      NY 2013
6        36      NY 2014

I пытался использовать функцию сравнения:

df <- df %>%group_by(state)%>%
      mutate(daily_count = diff(cum_count))

Но я получаю

Ошибка: столбец daily_count должен быть длиной 3 (количество строк) или один, а не 2

Дайте мне знать, что вы думаете.

Спасибо!

1 Ответ

0 голосов
/ 01 мая 2020

Может быть, вы можете попробовать diff, например,

df <- df %>%group_by(state)%>%
  mutate(daily_count = c(cum_count[1],diff(cum_count)))

так, чтобы

> df
# A tibble: 6 x 4
# Groups:   state [2]
  cum_count state    Year daily_count
      <dbl> <chr>   <int>       <dbl>
1         5 Alabama  2012           5
2        14 Alabama  2013           9
3        50 Alabama  2014          36
4         5 NY       2012           5
5        14 NY       2013           9
6        50 NY       2014          36

Вот базовая опция R через ave

df <- within(df,daily_count <- ave(cum_count,state,FUN = function(x) c(x[1],diff(x))))

такой, что

> df
  cum_count   state Year daily_count
1         5 Alabama 2012           5
2        14 Alabama 2013           9
3        50 Alabama 2014          36
4         5      NY 2012           5
5        14      NY 2013           9
6        50      NY 2014          36
...