Недавнее значение по дням недели как новый столбец - PullRequest
0 голосов
/ 03 июля 2018

Есть ли простой способ сделать это. У меня есть датафрейм со значениями и датами, и я хочу добавить столбец, который содержит значение самого последнего дня недели, который я вручную добавил ниже как val_recent.

df <- data.frame(
  date = seq(as.Date("2018/01/01"), by = "day", length.out = 20), 
  val = sample(1:10, 20, replace=TRUE)) %>% 
  mutate(weekday = strftime(date,'%A'))

    date        val weekday     val_recent
1   20/01/2018  4   Saturday    4
2   19/01/2018  3   Friday      3
3   18/01/2018  4   Thursday    4
4   17/01/2018  10  Wednesday   10
5   16/01/2018  2   Tuesday     2
6   15/01/2018  6   Monday      6
7   14/01/2018  1   Sunday      1
8   13/01/2018  9   Saturday    4
9   12/01/2018  9   Friday      3
10  11/01/2018  7   Thursday    4
11  10/01/2018  8   Wednesday   10
12  9/01/2018   6   Tuesday     2
13  8/01/2018   10  Monday      6
14  7/01/2018   6   Sunday      1
15  6/01/2018   3   Saturday    4
16  5/01/2018   3   Friday      3
17  4/01/2018   10  Thursday    4
18  3/01/2018   4   Wednesday   10
19  2/01/2018   2   Tuesday     2
20  1/01/2018   8   Monday      6

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Мы можем использовать first от dplyr

library(dplyr)
df %>%
   group_by(weekday) %>%
   mutate(val2 = first(val))

Предполагая, что «дата» не упорядочена, используйте which.min

df %>% 
  group_by(weekday) %>% 
  mutate(val2 = val[which.min(date)])

Или arrange по 'дате' и 'дням недели' (что будет дороже)

df %>%
    arrange(weekday, date) %>%
    group_by(weekday) %>%
     mutate(val2 = first(val))
0 голосов
/ 03 июля 2018

Просто сгруппируйте по выходным и возьмите первое значение

df%>%
  group_by(weekday)%>%
  mutate(val2=val[1])
# A tibble: 20 x 5
# Groups:   weekday [7]
   date         val weekday   val_recent  val2
   <chr>      <int> <chr>          <int> <int>
 1 20/01/2018     4 Saturday           4     4
 2 19/01/2018     3 Friday             3     3
 3 18/01/2018     4 Thursday           4     4
 4 17/01/2018    10 Wednesday         10    10
 5 16/01/2018     2 Tuesday            2     2
 6 15/01/2018     6 Monday             6     6
 7 14/01/2018     1 Sunday             1     1
 8 13/01/2018     9 Saturday           4     4
 9 12/01/2018     9 Friday             3     3
10 11/01/2018     7 Thursday           4     4
11 10/01/2018     8 Wednesday         10    10
12 9/01/2018      6 Tuesday            2     2
13 8/01/2018     10 Monday             6     6
14 7/01/2018      6 Sunday             1     1
15 6/01/2018      3 Saturday           4     4
16 5/01/2018      3 Friday             3     3
17 4/01/2018     10 Thursday           4     4
18 3/01/2018      4 Wednesday         10    10
19 2/01/2018      2 Tuesday            2     2
20 1/01/2018      8 Monday             6     6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...