如何解决如何以编程方式设置小标题列类型 数据
使用以下方法读取高大的XLSX文件让我有些不高兴:
> file = readxl::read_xlsx(filename,"sheetname")
避免实际XLSX文件的玩具示例:
> file = tibble(
+ names = c("name1","name2","name3"),+ values = c(TRUE,1,"chr")
+ )
> file
# A tibble: 3 x 2
names values
<chr> <chr>
1 name1 TRUE
2 name2 1
3 name3 chr
我想将其转换为此:
# A tibble: 1 x 3
name1 name2 name3
<dbl> <lgl> <chr>
1 1 TRUE chr
但是由于pivot_wider()
确定values列的类型为<chr>
,因此pivot_wider()
会为所有加宽的列保留该类型。
> file %>% pivot_wider(names_from = names,values_from = values)
# A tibble: 1 x 3
name1 name2 name3
<chr> <chr> <chr>
1 TRUE 1 chr
这需要我再次手动设置每种列类型。还有另一种(自动)方式吗?该文件的格式是固定的,但是内容可能会更改,因此我不能依赖硬编码类型设置。对于我来说,理想的做法是
readxl::read_xlsx(filename,"sheetname") %>%
pivot_wider(names_from = column1,values_from = column2,col_types = NULL)
解决方法
如果我们用type.convert
换行,它将自动更改类型
library(dplyr)
library(tidyr)
file %>%
pivot_wider(names_from = names,values_from = values) %>%
type.convert(as.is = TRUE)
# A tibble: 1 x 3
# name1 name2 name3
# <lgl> <int> <chr>
#1 TRUE 1 chr
或使用deframe/as_tibble_row
,转换为tibble
library(tibble)
deframe(file) %>%
as_tibble_row %>%
type.convert(as.is = TRUE)
另一个选项是data.table::transpose
type.convert(data.table::transpose(file,make.names = 'names'),as.is = TRUE)
# name1 name2 name3
#1 TRUE 1 chr
数据
file <- structure(list(names = c("name1","name2","name3"),values = c("TRUE","1","chr")),row.names = c(NA,-3L),class = c("tbl_df","tbl","data.frame"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。