我有 2 个数据框:
- 主要的一个
df
- 另一个数据框
tmp
它描述了列类型df
和新格式应转换哪些列
这是一个可重现的示例:
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"))
我想转换列的类型新格式不同于Format。我在使用 lapply 函数时遇到了很多困难,但未能成功。
Use 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
此函数要求将类型规范作为cols()
语句,或作为具有由单个字母指示的新列类型的字符串(例如,“c”代表字符,“f”代表因子,等等)。
所以要么重命名New_format
标签为其单字母版本(“c”、“i”、“f”),或者您可以使用str_sub
and paste
with tmp
得到第一个字母(其中type_convert
想要类型参数)。
注意:一定要设置guess_integer = TRUE
,否则将默认输入double
即使你要求整数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)