问题描述
我正在研究一个新的闪亮项目,并试图重用他在sql中所做的一些同事工作,以加快为该应用程序构建数据所需的时间。
我不完全知道如何描述这个问题,因此我将通过展示我所拥有的并解释我想要得到的东西来做到这一点。
- 是一个标识符列,过去我们使用vlookup拆分字符串部分并在excel中填写单元格。
- 该标识符的值是计数,平均值还是百分比。
如下所示。
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:"))