【问题标题】:R: Use data frame names for columns after/before applying purrr reduceR:在应用 purrr reduce 之后/之前为列使用数据框名称
【发布时间】:2021-02-15 16:17:14
【问题描述】:

我已经检查了this solution,但不幸的是,它不适合我更复杂的数据。

原始数据:

我有一个名为Total.Scores 的列表,其中包含十一个名为 2000-2020 每个都包含从 2000 年到 2020 年的年度数据。每个数据框都有不同的行数,但总是 12 列:IDCategoryScore.1-9Year

样本数据:

library(purrr)
Total.Scores <- list("2020" = data.frame(ID = c("A2_101", "B3_102", "LO_103", "TT_101"),
                                                          Category = c("blue", "red", "green", "red"),
                                                          Score.1 = c(1,2,3,0),
                                                          Score.2 = c(3,4,5,2),
                                                          Score.3 = c(0,0,1,1),
                                                          Year = c(2020, 2020, 2020, 2020)),
                     "2019" = data.frame(ID = c("A2_101", "B3_102", "LO_103"),
                                                          Category = c("blue", "red", "green"),
                                                          Score.1 = c(1,2,3),
                                                          Score.2 = c(3,4,5),
                                                          Score.3 = c(0,0,1),
                                                          Year = c(2019, 2019, 2019)),
                     "2018" = data.frame(ID = c("A2_101", "B3_102", "LO_103", "TT_201","AA_345"),
                                                          Category = c("blue", "red", "green", "yellow", "purple"),
                                                          Score.1 = c(1,2,3,3,5),
                                                          Score.2 = c(3,4,5,5,3),
                                                          Score.3 = c(0,0,1,3,0),
                                                          Year = c(2018, 2018, 2018, 2018, 2018)),
                     "2017" = data.frame(ID = c("A2_101", "B3_102", "LO_103", "TT_101"),
                                                          Category = c("blue", "red", "green", "red"),
                                                          Score.1 = c(1,2,3,0),
                                                          Score.2 = c(3,4,5,2),
                                                          Score.3 = c(0,0,1,1),
                                                          Year = c(2017, 2017, 2017, 2017)))

加入数据:

我通过full_join by IDCategoryTotal.Scores 列表中的数据框组合到新的大数据框Total.Yearly.Scores 中:

Total.Yearly.Scores <- Total.Scores %>% reduce(full_join, by = c("ID", "Category"))

结果:

# Total.Yearly.Scores

      ID Category Score.1.x Score.2.x Score.3.x Year.x Score.1.y Score.2.y Score.3.y Year.y Score.1.x.x Score.2.x.x Score.3.x.x Year.x.x
1 A2_101     blue         1         3         0   2020         1         3         0   2019           1           3           0     2018
2 B3_102      red         2         4         0   2020         2         4         0   2019           2           4           0     2018
3 LO_103    green         3         5         1   2020         3         5         1   2019           3           5           1     2018
4 TT_101      red         0         2         1   2020        NA        NA        NA     NA          NA          NA          NA       NA
5 TT_201   yellow        NA        NA        NA     NA        NA        NA        NA     NA           3           5           3     2018
6 AA_345   purple        NA        NA        NA     NA        NA        NA        NA     NA           5           3           0     2018
  Score.1.y.y Score.2.y.y Score.3.y.y Year.y.y
1           1           3           0     2017
2           2           4           0     2017
3           3           5           1     2017
4           0           2           1     2017
5          NA          NA          NA       NA
6          NA          NA          NA       NA

问题:

如何调整我的代码,以便Score.1-9Year 列的列标题包含2000-2020 的数据框名称? 例如,将它们从 Score.1.x 更改为 Score.1 2020

# Total.Yearly.Scores

      ID Category Score.1 2020 Score.2 2020 Score.3 2020 Year 2020 Score.1 2019 Score.2 2019 Score.3 2019 Year 2019 Score.1 2018  Score.2 2018  Score.3 2018  Year 2018 
1 A2_101     blue            1            3            0      2020            1            3            0      2019            1             3            0        2018
2 B3_102      red            2            4            0      2020            2            4            0      2019            2             4            0        2018
3 LO_103    green            3            5            1      2020            3            5            1      2019            3             5            1        2018
4 TT_101      red            0            2            1      2020            NA           NA           NA       NA            NA            NA           NA         NA
5 TT_201   yellow            NA           NA           NA       NA            NA           NA           NA       NA            3             5            3        2018
6 AA_345   purple            NA           NA           NA       NA            NA           NA           NA       NA            5             3            0        2018  
  Score.1 2017  Score.2 2017  Score.3 2017  Year 2017 
1            1             3             0       2017
2            2             4             0       2017
3            3             5             1       2017
4            0             2             1       2017
5            NA            NA            NA       NA
6            NA            NA            NA       NA

提前感谢您的帮助! 最好的问候,托马斯。

【问题讨论】:

    标签: r dataframe multiple-columns purrr names


    【解决方案1】:

    加入前我们可以rename

    library(dplyr)
    library(purrr)  
    library(stringr)  
    Total.Scores %>% 
        imap(~ {nm1 <- .y
         rename_at(.x, vars(-c("ID", "Category")), ~ str_c(., nm1, sep= ' '))}) %>%
        reduce(full_join, by = c("ID", "Category"))
    

    -输出

     ID Category Score.1 2020 Score.2 2020 Score.3 2020 Year 2020 Score.1 2019 Score.2 2019 Score.3 2019
    1 A2_101     blue            1            3            0      2020            1            3            0
    2 B3_102      red            2            4            0      2020            2            4            0
    3 LO_103    green            3            5            1      2020            3            5            1
    4 TT_101      red            0            2            1      2020           NA           NA           NA
    5 TT_201   yellow           NA           NA           NA        NA           NA           NA           NA
    6 AA_345   purple           NA           NA           NA        NA           NA           NA           NA
      Year 2019 Score.1 2018 Score.2 2018 Score.3 2018 Year 2018 Score.1 2017 Score.2 2017 Score.3 2017 Year 2017
    1      2019            1            3            0      2018            1            3            0      2017
    2      2019            2            4            0      2018            2            4            0      2017
    3      2019            3            5            1      2018            3            5            1      2017
    4        NA           NA           NA           NA        NA            0            2            1      2017
    5        NA            3            5            3      2018           NA           NA           NA        NA
    6        NA            5            3            0      2018           NA           NA           NA        NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-19
      • 2023-03-31
      • 2022-06-13
      • 2018-03-18
      • 2017-04-19
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      相关资源
      最近更新 更多