映射readr :: type_convert只到特定的列

问题描述

readr :: type_convert猜测数据帧中每列的类。我想将type_convert仅应用于数据框中的某些列(以将其他列保留为字符)。 MWE:

# A data frame with multiple character columns containing numbers.
df <- data.frame(A = letters[1:10],B = as.character(1:10),C = as.character(1:10))

# This works
df %>% type_convert()

Parsed with column specification:
cols(
  A = col_character(),B = col_double(),C = col_double()
)
   A  B  C
1  a  1  1
2  b  2  2
...

但是,我只想将该函数应用于列B(这是一个典型的示例;可能有多个列要尝试转换)。我尝试使用purrr :: map_at以及sapply,如下所示:

# This does not work
map_at(df,"B",type_convert)

Error in .f(.x[[i]],...) : is.data.frame(df) is not TRUE

# This does not work
sapply(df["B"],type_convert)

Error in FUN(X[[i]],...) : is.data.frame(df) is not TRUE

有没有一种方法可以仅将type_convert选择性地应用于数据帧的某些列?

编辑:@ekoam为type_convert提供了答案。但是,将此答案应用于许多专栏将是乏味的。最好使用base :: type.convert函数,该函数可以映射:

purrr::map_at(df,type.convert) %>%
   bind_cols()

# A tibble: 10 x 3
       A     B C    
   <chr> <int> <chr>
 1     a     1 1    
 2     b     2 2    

解决方法

尝试一下:

df %>% type_convert(cols(B = "?",C = "?",.default = "c"))

猜测B的类型;其他任何字符列均保持不变。棘手的部分是,如果任何列都不是字符类型,那么type_convert也将保持不变。因此,如果您真的必须type_convert,也许您必须首先将所有列都转换为字符。

,

type_convert似乎不支持它。我使用过几次的一种技巧是使用selectbind_cols的组合,如下所示。

df %>%
    select(B) %>% 
    type_convert() %>% 
    bind_cols(df %>% select(-B))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...