我有 2 个数据框:
dftmp,描述列的类型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 函数时遇到了很多困难,但未能成功。
使用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