如何从一个数据框中的字符中提取字符串并将其放入新表中 数据

问题描述

我正在研究一个新的闪亮项目,并试图重用他在sql中所做的一些同事工作,以加快为该应用程序构建数据所需的时间。

我不完全知道如何描述这个问题,因此我将通过展示我所拥有的并解释我想要得到的东西来做到这一点。

本质上,我们有一个sql脚本,可将一堆数据分成两列。

  1. 一个标识符列,过去我们使用vlookup拆分字符串部分并在excel中填写单元格。
  2. 该标识符的值是计数,平均值还是百分比。

如下所示。

                                            lookup output
    1:                                 dataAU20161    142
    2:                                 dataAU20171    246
    3:                                 dataAU20181     17
    4:                                 dataAU20191      3
    5:                                 dataAU20162    193
    6:                                 dataAU20172    203
    7:                                 dataAU20182     11
    8:                                 dataAU20192      9

因此,理想情况下,我想将此数据转换为以下格式,其中'data'字符串标识它们将进入同一数据帧。字符串中的年份将被实施为列,年份(1或2)之后的数字将作为列被实施为因子变量。

x   2016    2017    2018    2019
--------------------------------
1   142     246     17      3
2   193     203     11      9

对此将提供任何帮助!

解决方法

一种选择是将“查找”列分为两个

library(dplyr)
library(tidyr)
df1 %>%
    extract(lookup,into = c('lookup','rn'),'dataAU(\\d{4})(\\d{1})') %>%
    pivot_wider(names_from= lookup,values_from =output) %>%
    dplyr::select(-rn)
# A tibble: 2 x 4
#  `2016` `2017` `2018` `2019`
#   <int>  <int>  <int>  <int>
#1    142    246     17      3
#2    193    203     11      9

数据

df1 <- structure(list(lookup = c("dataAU20161","dataAU20171","dataAU20181","dataAU20191","dataAU20162","dataAU20172","dataAU20182","dataAU20192"
),output = c(142L,246L,17L,3L,193L,203L,11L,9L)),class = "data.frame",row.names = c("1:","2:","3:","4:","5:","6:","7:","8:"))