Как я могу создать последовательность в R? - PullRequest
1 голос
/ 26 мая 2020

Я знаю, что в R есть функция для создания последовательности, но она не работает именно для того, что мне нужно.

У меня есть фрейм данных, размер которого будет меняться каждый раз, когда я запускаю свой код. Это мой фрейм данных

 pais   cum_cases  time_cases  
 MX        1            1
 MX        4            2
 MX        5            6
....

Я хочу заменить значения столбца cum_cases на ser ie, который удваивает значения. Пример. Мне действительно безразлично, какие значения находятся в столбце cum_Cases. Я хочу заменить двойные значения остроумием, начиная с определенного c значения. Например, если я хочу начать со значения ** 10 , все следующие значения столбцов должны быть заменены на

cum_cases
  10
  20
  40
  80
  160
  320
... Until the last row of my data frame

Пример 2. x -> 6

cum_cases
  6
  12
  24
  48
  96
  192
... Until the last row of my data frame

Ответы [ 2 ]

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

Вы можете использовать cumprod в сочетании с rep, чтобы создать последовательность удвоения.

(x$cum_cases <- 10 * cumprod(c(1, rep(2, nrow(x)-1))))
#[1] 10 20 40

(x$cum_cases <- 6 * cumprod(c(1, rep(2, nrow(x)-1))))
#[1]  6 12 24

Данные:

x <- data.frame(pais="MX", cum_cases=c(1,4,5), time_cases=c(1,2,6))
0 голосов
/ 26 мая 2020

Вам нужно умножить начальное значение (первая строка) на 2 в степени rowid - 1, поскольку значение удваивается с каждой строкой. Способ сделать это с помощью dplyr:

df <- data.frame(time_cases = c(1, 2, 6, 10, 11, 15), cum_cases = 6)

library(dplyr)
df %>% 
  tibble::rowid_to_column() %>% 
  mutate(cum_cases = cum_cases[1] * 2 ^ (rowid - 1)) %>% 
  select(-rowid)

  time_cases cum_cases
1          1         6
2          2        12
3          6        24
4         10        48
5         11        96
6         15       192

Сначала я создаю rowid с помощью tibble::rowid_to_column(), а затем снова удаляю его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...