Только с 1 строкой CSS ... Вы можете сделать это.
body{ height: 100vh; }
С любым количеством столбцов даты после first_login
, мы можем сделать следующее.
gather
столбцы даты в один столбец, так что мы можем на самом деле работать с удобным. Это аккуратный формат, в котором каждая строка представляет собой комбинацию дня и дня пользователя. Date
объекты и определите дни между наблюдением и first_log
. Мы используем Interval
, чтобы сделать это, чтобы обеспечить разумное поведение вокруг неровностей временной шкалы. filter
, чтобы сохранить только наблюдения, которые произошли в желаемом диапазоне недель summarise
, чтобы рассчитать общее количество входов в систему за этот период, и right_join
значения обратно на оригинал. Обратите внимание, что без дополнительных образцов данных трудно быть более наглядным, поскольку здесь суммируется только одна ячейка, и поэтому только пользователь с id = 1
фактически имеет любые значения для суммирования. library(tidyverse)
library(lubridate)
tbl <- tibble(id = c(1:4), first_log = c("18-12-01", "18-12-02", "18-12-02", "18-12-05"), X18_12_01 = c(NA, 1, 1, 2), X18_12_02 = c(5, 2, 1, 1))
tbl %>%
gather(day, num_logins, -id, -first_log) %>%
mutate(
first_log = ymd(first_log),
day = day %>% str_remove("^X") %>% ymd(),
days_since_event = as.period(first_log %--% day, "day"),
) %>%
filter(days_since_event > days(0) & days_since_event <= days(7)) %>%
group_by(id) %>%
summarise(total_logins = sum(num_logins, na.rm = TRUE)) %>%
right_join(tbl, by = "id")
#> # A tibble: 4 x 5
#> id total_logins first_log X18_12_01 X18_12_02
#> <int> <dbl> <chr> <dbl> <dbl>
#> 1 1 5 18-12-01 NA 5
#> 2 2 NA 18-12-02 1 2
#> 3 3 NA 18-12-02 1 1
#> 4 4 NA 18-12-05 2 1
Создано в 2019-03-04 при помощи пакета представляет (v0.2.1) sup>
Если предположить, что у вас есть только 7 столбцов после first_log
, то это будет суммировать общее количество входов в систему за промежуток времени, который у вас есть между столбцами. В приведенном ниже примере показано только общее время, в течение которого пользователь входил в систему в течение 2 дней.
library(tidyverse)
tibble(id=c(1:4),
first_log = c("18-12-01",
"18-12-02",
"18-12-02",
"18-12-05"),
X18_12_01 = c(NA,1,1,2),
X18_12_02 = c(5,2,1,1)) %>%
gather(key = "days", value = "times_visted", 3:length(.)) %>%
group_by(id) %>%
summarise(total_visits = sum(times_visted, na.rm = T))
#> # A tibble: 4 x 2
#> id total_visits
#> <int> <dbl>
#> 1 1 5
#> 2 2 3
#> 3 3 2
#> 4 4 3
Создано в 2019-03-04 при помощи пакета представитель (v0.2.1) sup>