#r #excel #dplyr #stringr
#r #excel #dplyr #stringr
Вопрос:
Я работаю над новым блестящим проектом и пытаюсь повторно использовать некоторые работы моего коллеги, которые он выполнил в SQL, чтобы ускорить время, необходимое для создания данных для этого приложения.
Я точно не знаю, как описать эту проблему, поэтому я сделаю это, показав, что у меня есть, и объяснив, что я хочу получить.
По сути, у нас есть 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
Мы были бы очень признательны за любую помощь в этом!
Ответ №1:
Вариантом было бы разделить столбец ‘lookup’ на два
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:"))
Комментарии:
1. Спасибо, это отличное решение! Также могу я спросить, что также переводит регулярное выражение, которое вы использовали? Или есть ли где-нибудь, что я могу прочитать, чтобы понять больше. Я не очень хорош в них.
2. @fullera
\d
Подразумевает цифру и{4}
означает 4 цифры, мы записываем их в виде группы (()
), за которой следует вторая группа с одной цифрой. Это возвращает два столбца с 4 цифрами и последней цифрой соответственно), а затем преобразовать обратно в широкий формат