R 将普通表转换为四次表

R 将普通表转换为四次表,r,R,使用R: 最初,该表类似于:PS(日期列的格式为:(dd/mm/yyyy)) 同样,对于2018年和2019年(可以针对不同的产品进行更改,因此下表的行数需要动态变化) 我希望桌子是这样的: Date Winter Spring Summer Fall 2017 Sum of Q (01/17-03/17) Sum of Q (04/17-06/17) Sum

使用R:

最初,该表类似于:PS(日期列的格式为:(dd/mm/yyyy))

同样,对于2018年和2019年(可以针对不同的产品进行更改,因此下表的行数需要动态变化)

我希望桌子是这样的:

Date         Winter                   Spring                 Summer                      Fall

2017  Sum of Q (01/17-03/17)   Sum of Q (04/17-06/17)  Sum of Q (07/17-09/17)    Sum of Q (10/17-12/17)
2018  Sum of Q (01/18-03/18)   Sum of Q (04/18-06/18)  Sum of Q (07/18-09/18)    Sum of Q (10/18-12/18)
2019  Sum of Q (01/19-03/19)   Sum of Q (04/19-06/19)  Sum of Q (07/19-09/19)    Sum of Q (10/19-12/19)
I/p数据:

结构(列表)时间=结构(1:30,.Label=c(“2017-02-01”), "2017-03-01", "2017-04-01", "2017-05-01", "2017-06-01", "2017-07-01", "2017-08-01", "2017-09-01", "2017-10-01", "2017-11-01", "2017-12-01", "2018-01-01", "2018-02-01", "2018-03-01", "2018-04-01", "2018-05-01", "2018-06-01", "2018-07-01", "2018-08-01", "2018-09-01", "2018-10-01", "2018-11-01", "2018-12-01", "2019-01-01", "2019-02-01", "2019-03-01", “2019-04-01”、“2019-05-01”、“2019-06-01”、“2019-07-01”,class=“factor”), 数量=c(1638.2520529,0,0,1644.92571561629.28082172227.0057667, 586.0942485, 593.1155226, 1664.6943283, 2193.6993566, 2696.5906737, 3354.9333327, 2749.2299918, 3835.7584686, 2791.6314399, 2145.3504203, 3311.5319066, 4446.0188521, 2740.9135081, 2786.6458353, 3839.8798065, 3216.524473, 566.3303976, 0, 0, 0, 0, 559.2043639, 0, 528.4764685 ),季度=c(“第一季度”、“第一季度”、“第二季度”、“第二季度”、“第二季度”、“第三季度”、“第三季度”, “第三季度”、“第四季度”、“第四季度”、“第四季度”、“第一季度”、“第一季度”、“第二季度”、“第二季度”、“第二季度”, “第三季度”、“第三季度”、“第三季度”、“第四季度”、“第四季度”、“第一季度”、“第一季度”、“第一季度”、“第二季度”, “Q2”,“Q2”,“Q3”),季节=结构(c(1L,2L,2L,2L,3L, 3L,3L,4L,4L,4L,1L,1L,2L,2L,2L,3L,3L,3L,3L,3L,4L, 4L,4L,1L,1L,1L,2L,2L,3L,3L),标签=c(“冬季”, “春天”、“夏天”、“秋天”),class=“factor”)),row.names=c(NA,
-30L),class=“data.frame”)

日期更改为日期类,从中提取年份并将数据转换为宽格式

library(dplyr)

df %>%
  mutate(Time = as.Date(Time),
         year = format(Time, '%Y')) %>%
  select(-Time, -Quarters) %>%
  tidyr::pivot_wider(names_from = Season, values_from = Qty, values_fn = sum)
  #OR in old tidyr
  #tidyr::pivot_wider(names_from = Season, values_from = Qty, 
  #                   values_fn = list(Qty = sum))

# A tibble: 3 x 5
#  year  Winter Spring Summer  Fall
#  <chr>  <dbl>  <dbl>  <dbl> <dbl>
#1 2017   4335.  1645.  4442. 4452.
#2 2018   6670.  8773. 10498. 9843.
#3 2019      0    559.   528.   NA 

Date
更改为Date类,从中提取年份并将数据转换为宽格式

library(dplyr)

df %>%
  mutate(Time = as.Date(Time),
         year = format(Time, '%Y')) %>%
  select(-Time, -Quarters) %>%
  tidyr::pivot_wider(names_from = Season, values_from = Qty, values_fn = sum)
  #OR in old tidyr
  #tidyr::pivot_wider(names_from = Season, values_from = Qty, 
  #                   values_fn = list(Qty = sum))

# A tibble: 3 x 5
#  year  Winter Spring Summer  Fall
#  <chr>  <dbl>  <dbl>  <dbl> <dbl>
#1 2017   4335.  1645.  4442. 4452.
#2 2018   6670.  8773. 10498. 9843.
#3 2019      0    559.   528.   NA 

值中有错误。\u fn[[value]]:类型为“builtin”的对象不可用subsettable@InVinci它是否适用于我在回答中分享的数据?如果是,并且您在将其应用于数据时遇到问题,请使用
dput
以与我共享的相同方式共享您的数据。如果您的数据很大,您可以执行
dput(head(df,20))
并更新您的post.Shared。我使用您的代码片段根据我的数据更改了列名,但它抛出了上述错误。@InVinci Try updated answer。对于您共享的数据,它对我有效。同样的错误-值中的错误\u fn[[value]]:类型为“builtin”的对象不是SubsetableError值中的错误\u fn[[value]]:类型为“builtin”的对象不是subsettable@InVinci它是否适用于我在回答中分享的数据?如果是,并且您在将其应用于数据时遇到问题,请使用
dput
以与我共享的相同方式共享您的数据。如果您的数据很大,您可以执行
dput(head(df,20))
并更新您的post.Shared。我使用您的代码片段根据我的数据更改了列名,但它抛出了上述错误。@InVinci Try updated answer。它适用于您共享的数据。同样的错误-值中的错误\u fn[[value]]:类型为“builtin”的对象不可再附加
df %>%
  type.convert(as.is = TRUE) %>% 
  mutate(Time = as.Date(Time),
         year = format(Time, '%Y')) %>%
  select(-Time, -Quarters) %>%
  group_by(year, Season) %>%
  summarise(Qty = sum(Qty)) %>%
  tidyr::spread(Season, Qty)
  #OR
  #tidyr::pivot_wider(names_from = Season, values_from = Qty)