unnest()错误:“无法从数字转换为字符”

时间:2019-04-07 01:51:09

标签: r character numeric unnest

我使用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

1 个答案:

答案 0 :(得分:0)

colClasses = 'character'中使用read_xlsx,这应该可以工作。

col_types = 'text'