gpt4 book ai didi

r - 将 Year 列复制到 R 中的 QuarterYear

转载 作者:行者123 更新时间:2023-12-02 01:25:47 25 4
gpt4 key购买 nike

我知道如何在 R 中复制列,但想知道是否有更优雅的方法来完成我正在执行的特定任务。

我有多个数据集。有些按年份显示值,有些按季度年显示值。由于我需要按 QuarterYear 对所有数据集进行计算,因此我需要更改按 Year 具有值的数据集,以便仅按 QuarterYear 重复该值。

我的 df 看起来如何:

  Item  Year2020  Year2021
A 1 4
B 2 5
C 3 6

我想要实现的目标

  Item   1Q20 2Q20 3Q20 4Q20 1Q21 2Q21 3Q21 4Q21 
A 1 1 1 1 4 4 4 4
B 2 2 2 2 5 5 5 5
C 3 3 3 3 6 6 6 6

我如何实现它:

#recreate df
df <- data.frame(Item = c("A", "B", "C"),
Year2020 = c(1, 2, 3),
Year2021 = c(4, 5, 6))

#replicate Year column 3 times and change names

df <- df %>%
cbind(replicate(3, df$`Year2020`)) %>%
rename(`1Q20` = `Year2020`,
`2Q20` = `1`,
`3Q20` = `2`,
`4Q20` = `3`) %>%
cbind(replicate(3, df$`Year2021`)) %>%
rename(`1Q21` = `Year2021`,
`2Q21` = `1`,
`3Q21` = `2`,
`4Q21` = `3`)

#rearrange col
df <- df[,c(1:2,4:6,3,7:9)]

幸运的是,我只有两年的专栏,但我必须对大量数据集进行操作,并想知道是否有更简洁的方法。

最佳答案

不知道什么对你来说是优雅的,我喜欢 pivot_* 工作流程:

library(tidyverse)
df %>%
pivot_longer(-Item) %>%
slice(rep(1:n(), each = 4L)) %>%
group_by(Item, name) %>%
mutate(name = paste0(1:n(), "Q", str_extract(name, "[0-9]{2}$"))) %>%
pivot_wider()

# # A tibble: 3 × 9
# # Groups: Item [3]
# Item `1Q20` `2Q20` `3Q20` `4Q20` `1Q21` `2Q21` `3Q21` `4Q21`
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 A 1 1 1 1 4 4 4 4
# 2 B 2 2 2 2 5 5 5 5
# 3 C 3 3 3 3 6 6 6 6

关于r - 将 Year 列复制到 R 中的 QuarterYear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74698903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com