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

标签 r dataframe dplyr

我知道如何在 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/

相关文章:

Rscript 执行错误 : No such file or directory

r - 在 R 中应用空括号会删除属性吗? (阅读R语言定义)

python - 检查数据框中的每一行和每一列,并用用户定义函数替换值

python - 将 pandas 数据帧下采样到任意长度

r - 数据框从现有行添加新行

R,dplyr : Collapse character variable elements by group if there is only one unique non-NA element per group

r - data.table - setkey(...) 是否创建索引或对数据表中的行进行物理重新排序?

r - R:如何从ggplot2中的平滑器中删除异常值?

python - 在 Pandas DataFrame 中构建多重索引

r - dplyr 总结输出 - 如何保存它