Таблица данных и шаблон Excel

#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 между длинной и широкой взад и вперед (плавление/постоянная передача).