根据向量更改列的类别

CCb*_*Cbs 6 format r apply

我有 2 个数据框:

  • 主要的一个df
  • 另一个数据框tmp,描述列的类型df以及应转换列的New_format

这是一个可重现的示例:

df <- data.frame(var1 = c("a", "b", "c"),
                 var2 = c(1,2,3), 
                 var3 = c("d", "e", "f"))

tmp <- data.frame(Variable = c("var1", "var2", "var3"), 
                  Format = c("character", "numeric", "character"),
                  New_format = c("character", "integer", "factor"))
Run Code Online (Sandbox Code Playgroud)

我想转换New_format与Format不同的列类型。我在使用 lapply 函数时遇到了很多困难,但未能成功。

and*_*ece 4

使用readr::type_convert()

library(tidyverse)

types <- paste(map_chr(tmp$New_format, ~str_sub(., 1,1)), collapse = "")

new_df <- type_convert(df, types, guess_integer = T)

str(new_df)
'data.frame':   3 obs. of  3 variables:
 $ var1: chr  "a" "b" "c"
 $ var2: int  1 2 3
 $ var3: Factor w/ 3 levels "d","e","f": 1 2 3
Run Code Online (Sandbox Code Playgroud)

此函数要求将类型规范作为cols()语句或作为字符串传递,其中新列类型由单个字母指示(例如,“c”代表字符,“f”代表因子,等等)。

因此,要么只需将New_format标签重命名为其单字母版本(“c”、“i”、“f”),要么可以使用str_suband pastewithtmp来获取第一个字母(type_convert需要类型参数)。

注意:一定要设置,否则即使你要求输入整数guess_integer = TRUE也会默认输入。double