fi-6ren">
gpt4 book ai didi

r - 如何以编程方式设置 tibble 列类型

转载 作者:行者123 更新时间:2023-12-04 09:11:21 25 4
gpt4 key购买 nike

我使用以下方法读取了一个高大的 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"))

关于r - 如何以编程方式设置 tibble 列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63344693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com