R 将普通表转换为四次表
使用R: 最初,该表类似于:PS(日期列的格式为:(dd/mm/yyyy)) 同样,对于2018年和2019年(可以针对不同的产品进行更改,因此下表的行数需要动态变化) 我希望桌子是这样的: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
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)