我使用map()和read_xlsx()从36个excel xlsx文件中提取一些数据(从excel文件中的特定范围)到一个文件中。基本上,我调整了博客中的代码。(https://serialmentor.com/blog/2016/6/13/reading-and-combining-many-tidy-data-files-in-R,部分:保留有关读取文件的辅助信息)。
效果很好。我可以得到一个嵌套的数据框。但是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(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 。
答案 0 :(得分:0)
在colClasses = 'character'
中使用read_xlsx
,这应该可以工作。
或
col_types = 'text'