如何在紧凑的字符串表示中返回R tibble的col类型?

时间:2017-06-16 04:30:27

标签: r tibble

例如,我有这样的傻瓜。 test< - tibble(a = 10,b =" a")

有了这个输入,我想要一个可以返回" dc"代表双重和性格。

我问这个的原因是我想要阅读很多文件。我不想让read_table函数来决定每列的类型。我可以手动指定字符串,但由于我要导入的实际数据有50列,因此手动操作非常困难。

感谢。

2 个答案:

答案 0 :(得分:1)

虽然前面提到的test %>% summarise_all(class)会以长格形式为您提供列的类名,而在此问题中,您可以将它们转换为单个字符代码,这意味着read_table { {1}}。要从类名映射到单个字母代码,您可以使用查找表,这里是col_types的一个(不完整)示例:

dput

现在使用此表,我将其称为structure(list(col_type = c("character", "integer", "numeric", "double", "logical"), code = c("c", "i", "n", "d", "l")), .Names = c("col_type", "code"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -5L)) ,我们最终可以将列类型转换为单个字符串:

types

这将获取每列(library(dplyr) library(tidyr) library(stringr) test %>% summarise_all(class) %>% gather(col_name, col_type) %>% left_join(types) %>% summarise(col_types = str_c(code, collapse = "")) %>% unlist(use.names = FALSE) )的类,然后将它们收集到与列名称(summarise_all)匹配的tibble中。 gather列上的left_join匹配,并为每个列名提供简短的1-char代码。现在我们不对列名做任何事情,所以只需与col_typesummarise连接就可以了。最后str_c将字符串从一个元素中拉出来。

答案 1 :(得分:0)

test <- tibble(a = 10, b = "a")

test %>% purrr::map_chr(pillar::type_sum) %>% paste(collapse = "_")
# "dbl_chr"