我将此输入作为 data.frame
dnm2<-data.frame( id=as.character(c("AA","AA","AA","AA","AA","AA","AA","AA","AA","AA","AA","BB","BB","BB","BB","BB","BB","BB","BB")),
dte=as.Date(c("2018-01-31","2018-02-01","2018-02-02","2018-02-03","2018-02-04","2018-02-05","2018-02-06","2018-02-07","2018-02-08","2018-02-09","2018-02-10","2018-01-29","2018-01-30","2018-01-31","2018-02-01","2018-02-02","2018-02-03","2018-02-04","2018-02-05")),
varx=c(3,2,4,5,4,4,3,5,3,2,3,2,5,3,3,1,2,1,3))
> dnm2
id dte varx
1 AA 2018-01-31 3
2 AA 2018-02-01 2
3 AA 2018-02-02 4
4 AA 2018-02-03 5
5 AA 2018-02-04 4
6 AA 2018-02-05 4
7 AA 2018-02-06 3
8 AA 2018-02-07 5
9 AA 2018-02-08 3
10 AA 2018-02-09 2
11 AA 2018-02-10 3
12 BB 2018-01-29 2
13 BB 2018-01-30 5
14 BB 2018-01-31 3
15 BB 2018-02-01 3
16 BB 2018-02-02 1
17 BB 2018-02-03 2
18 BB 2018-02-04 1
19 BB 2018-02-05 3
我想要的是将行日期转换为列工作日。 哪种方法最简单?像这样:
id firstDate lastDate Mon_varx Tue_varx Wed_varx Thu_varx Fri_varx Sat_varx Sun_varx
AA 2018-01-29 2018-02-04 3 2 4 5 4
AA 2018-02-05 2018-02-11 4 3 5 3 2 3
BB 2018-01-29 2018-02-04 2 5 3 3 1 2 1
BB 2018-02-05 2018-02-11 3
答案 0 :(得分:0)
你可以这样做:
library(tidyverse)
library(lubridate)
dnm2 %>%
mutate(day = format(dte, "%a_varx"),
firstDate = floor_date(dte, 'week') + days(1),
lastDate = ceiling_date(dte, 'week'))%>%
pivot_wider(c(id, firstDate, lastDate), names_from = day, values_from = varx)
# A tibble: 4 x 10
id firstDate lastDate Wed_varx Thu_varx Fri_varx Sat_varx Sun_varx Mon_varx Tue_varx
<chr> <date> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 AA 2018-01-29 2018-02-04 3 2 4 5 NA NA NA
2 AA 2018-02-05 2018-02-11 5 3 2 3 4 4 3
3 BB 2018-01-29 2018-02-04 3 3 1 2 NA 2 5
4 BB 2018-02-05 2018-02-11 NA NA NA NA 1 3 NA
dnm2 %>%
mutate(day = format(dte, "%a_varx"),
firstDate = floor_date(dte, 'week'),
firstDate = if_else(firstDate == dte, dte - weeks(1), firstDate) + days(1),
lastDate = ceiling_date(firstDate, 'week')) %>%
pivot_wider(c(id, firstDate, lastDate), names_from = day, values_from = varx)
id firstDate lastDate Wed_varx Thu_varx Fri_varx Sat_varx Sun_varx Mon_varx Tue_varx
<chr> <date> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 AA 2018-01-29 2018-02-04 3 2 4 5 4 NA NA
2 AA 2018-02-05 2018-02-11 5 3 2 3 NA 4 3
3 BB 2018-01-29 2018-02-04 3 3 1 2 1 2 5
4 BB 2018-02-05 2018-02-11 NA NA NA NA NA 3 NA