R 如何从一个数据帧中的字符中提取字符串并将其放入新表中
我正在从事一个新的闪亮项目,并试图重新利用我同事在SQL中所做的一些工作,以加快为该应用程序构建数据所需的时间 我不知道该如何描述这个问题,所以我会通过展示我所拥有的和解释我想要得到的来描述 本质上,我们有一个SQL脚本,它将一组数据分为两列R 如何从一个数据帧中的字符中提取字符串并将其放入新表中,r,excel,dplyr,stringr,R,Excel,Dplyr,Stringr,我正在从事一个新的闪亮项目,并试图重新利用我同事在SQL中所做的一些工作,以加快为该应用程序构建数据所需的时间 我不知道该如何描述这个问题,所以我会通过展示我所拥有的和解释我想要得到的来描述 本质上,我们有一个SQL脚本,它将一组数据分为两列 是一个标识符列,过去我们使用vlookup拆分字符串组件并在excel中填充单元格 是所述标识符的值,无论是计数、平均值还是百分比 它将如下所示 lookup outp
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
库(dplyr)
图书馆(tidyr)
df1%>%
提取(lookup,into=c('lookup','rn'),'dataAU(\\d{4})(\\d{1})%>%
pivot\u更宽(名称\u from=查找,值\u from=输出)%>%
dplyr::选择(-rn)
#一个tibble:2x4
# `2016` `2017` `2018` `2019`
#
#1 142 246 17 3
#2 193 203 11 9
数据
df1谢谢这是一个很好的解决方案!我还可以问一下你用的正则表达式也翻译了什么吗?或者有什么地方可以让我读得更明白。我不太擅长它们。@fullera\\d
表示数字,而{4}
表示4个数字,我们将它们作为一个组(()
)捕获,然后是第二个组和一个数字。这将返回两列(分别为4位和最后一位),然后重新调整为宽格式
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:"))