首页 > 解决方案 > 工作日的最近值作为新列

问题描述

有没有一种简单的方法可以做到这一点。我有一个包含值和日期的数据框,并希望添加一个包含最近工作日的值的列 - 我已在下面手动添加为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

标签: rdplyr

解决方案


只需按周末分组并取第一个值

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

推荐阅读