Я использовал map () и read_xlsx (), чтобы извлечь некоторые данные (из определенного диапазона в файле Excel) из 36 файлов Excel XLSX в один файл.По сути, я настроил коды из блога. (https://serialmentor.com/blog/2016/6/13/reading-and-combining-many-tidy-data-files-in-R, часть: Хранение вспомогательной информации о прочитанных файлах).
Это сработало очень хорошо.Я могу получить вложенный фрейм данных.Но шаг unnest () не сработал.Я выяснил причину в том, что unnest () не может обрабатывать смесь разных типов.Один столбец является числовым типом в большинстве списков, но столбец является символьным типом в одном списке.поэтому unnest () не может работать.
Можно ли разрешить unnest () преобразовывать все числа в каждом файле в символы, чтобы сработало unnest?если мы не можем позволить unnest сделать это, есть ли другие способы для удаления данных?
система windows , R версия 3.5 версия других подключенных пакетов:
[1] readxl_1.3.0 forcats_0.4.0 stringr_1.4.0 dplyr_0.8.0.1
purrr_0.3.1
[6] readr_1.3.1 tidyr_0.8.3 tibble_2.0.1 ggplot2_3.1.0
tidyverse_1.2.1
после map () и read_xlsx () :
код:
file_path <- "files"
files_name <- dir(path = file_path, pattern = "*.xlsx", all.files =FALSE)
data <- data_frame(filename = files_name) %>% # create a data frame
# holding the file names
mutate(file_contents = map(filename, # read files into
~ read_xlsx(file.path(file_path, .), range =
"A56:J60")) # a new data column
) '
данные:
> data
># A tibble: 36 x 2
> filename file_contents
> <chr> <list>
>1 JC04Feb19Run003.xlsx <tibble [4 x 10]>
>2 JC04Feb19Run004.xlsx <tibble [4 x 10]>
>3 JC06Feb19Run005.xlsx <tibble [4 x 10]>
>4 JC06Feb19Run006.xlsx <tibble [4 x 10]>
>5 JC07Feb2019Run007.xlsx <tibble [4 x 10]>
>6 JC07Feb2019Run008.xlsx <tibble [4 x 10]>
>7 JC11Feb2019Run009.xlsx <tibble [4 x 10]>
>8 JC12Feb2019Run011.xlsx <tibble [4 x 10]>
>9 JC12Feb2019Run012.xlsx <tibble [4 x 10]>
>10 JC13Feb2019Run015 (2).xlsx <tibble [4 x 10]>
># ... with 26 more rows
после unnest (данные)
> unnest(data)
Error: Column `CON` can't be coverted from numeric to character
после str (данные) :
..$ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 4 obs. of 10
variables:
.. ..$ Sample : chr "LQC-1" NA "LQC-2" NA
.. ..$ Wells : chr "H3" "H4" "C9" "C10"
.. ..$ NOM pg/mL: num 50 NA 50 NA
.. ..$ SIGNAL : num 256 257 314 213
.. ..$ CON : num 98.8 99.1 112.5 87.7
.. ..$ XCON : num 99 NA 100 NA
.. ..$ SDCON : num 0.18 NA 17.5 NA
.. ..$ CVCON : num 0.2 NA 17.5 NA
.. ..$ %REC : num 198 NA 200 NA
.. ..$ STATUS : chr "FAIL" NA "FAIL" NA
..$ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 4 obs. of 10
variables:
.. ..$ Sample : chr "LQC-1" NA "LQC-2" NA
.. ..$ Wells : chr "H3" "H4" "C9" "C10"
. ..$ NOM pg/mL: num 50 NA 50 NA
.. ..$ SIGNAL : num 878 314 9 222
.. ..$ CON : chr "132.69999999999999" "48.68" "Range?"
"34.979999999999997"
.. ..$ XCON : num 90.7 NA 35 NA
.. ..$ SDCON : num 59.4 NA 0 NA
.. ..$ CVCON : num 65.5 NA 0 NA
.. ..$ %REC : num 181 NA 70 NA
.. ..$ STATUS : chr "FAIL" NA "PASS" NA
показывает, что столбец CON равен num, в 36 столбцах, в то время как в одном столбце есть chr .