#r #excel #data.table
Вопрос:
Я пытаюсь импортировать данные из шаблона Excel в R. Ниже вы можете увидеть, как выглядит таблица:
Эта таблица содержит заголовки (например, 2021-2017, для мужчин и женщин) для обоих столбцов, и это вызывает проблемы, когда я пытаюсь импортировать данные в R. Для загрузки я запускаю следующие строки кода:
Export_I01 <- data.table(
read.xlsx("Export_I01.xlsx", startRow = 2, endRow = 4, sheetIndex = 1, header = TRUE)
)
Результат выглядит так, как показано на рисунке ниже:
Это не очень хороший ввод, потому что есть суффикс: например Male
, первый столбец, но также и третий Male.1
. Итак, может ли кто-нибудь помочь мне ввести эти данные в том же формате, что и таблица из Excel?
Комментарии:
1. В R есть только имена столбцов, для группы столбцов нет имен. Таким образом, у вас не может быть » формата, похожего на таблицу из Excel » в R. С какой целью вы импортируете его в R?
2. Ваши данные в Excel на самом деле представляют собой диапазон, а не таблицу. Как и R, таблицы Excel не допускают двух столбцов с одинаковым именем.
Ответ №1:
Нет простого способа сделать это, но вы можете придумать некоторые обходные пути. Этот использует readxl
, dplyr
, zoo
, и purrr
:
dt <- read_excel("test.xlsx", col_names = F)
dt <- dt %>% mutate(pmap_df(., ~ na.locf0(c(...))))
colnames(dt) <- gsub("\.NA", "", paste(dt[1,], dt[2,], sep = "."))
dt <- dt %>% filter(row_number() > 2)
Что приводит к:
# A tibble: 2 x 6
English Country `2021-2017.Male` `2021-2017.Female` `2016-2012.Male` `2016-2012.Female`
<chr> <chr> <chr> <chr> <chr> <chr>
1 1 Czech Republic 5 55 5 5
2 2 Denmark 5 0 0 0
Ответ №2:
R добавляет суфикс для разных столбцов с одинаковым именем. Я бы предложил изменить имена столбцов в excel, чтобы различать мужчин и женщин по годам, например «Мужской 2021_2017» и «Мужской 2016_2012».
Вы также можете переформатировать таблицу, чтобы в ней был только один столбец «Мужчина» и «Женщина», и добавить столбец «дата», в котором вы указываете годы, соответствующие каждому значению.
Комментарии:
1. Я не могу изменить шаблон Excel. Поэтому по этой причине я пытаюсь найти какое-то решение с помощью R
2. Некоторые функции R для чтения таблиц/CSV/электронных таблиц имеют
check.names=
(или аналогичные) аргументы. Это может привести к появлению фрейма в R, у которого есть неоднозначные имена столбцов, но не всегда нужно изменять исходные данные, чтобы избежать такого поведения автосуффикса.
Ответ №3:
Вам нужно сделать выбор, и это может зависеть от того, насколько вы гибки в изменении формата файла Excel. Если это способ, которым он должен быть отформатирован или предоставлен вами, а не гибким, вы должны сделать выбор.
Выберите между широким или длинным форматом ваших данных.
Широкий будет означать, что у вас в итоге будет 2 строки с «Мужским_2021_2017» и «Мужским_2016_2012» в виде отдельных столбцов (то же самое для женщин), в то время как длинный будет означать, что у вас будет 4 строки с новым столбцом группы «year_range» и только один столбец для мужчин и один для женщин.
В любом случае это нормально, так как есть несколько вариантов изменения формы в R между длинной и широкой взад и вперед (плавление/постоянная передача).