如果您需要进行一些手动修改,这非常有用 - 您可以将列作为字符读取,使用(例如)正则表达式清理它,然后让 readr 再次尝试解析它。该名称是对基础 utils::type.convert()
的致敬。
用法
type_convert(
df,
col_types = NULL,
na = c("", "NA"),
trim_ws = TRUE,
locale = default_locale(),
guess_integer = FALSE
)
参数
- df
-
一个 DataFrame 。
- col_types
-
NULL
、cols()
规范或字符串之一。有关更多详细信息,请参阅vignette("readr")
。如果是
NULL
,则将使用所有行来估算列类型。 - na
-
要解释为缺失值的字符串的字符向量。将此选项设置为
character()
以指示没有缺失值。 - trim_ws
-
在解析每个字段之前是否应该删除前导和尾随空格(ASCII 空格和制表符)?
- locale
-
区域设置控制默认值因地而异。默认区域设置为 US-centric(如 R),但您可以使用
locale()
创建自己的区域设置来控制默认时区、编码、小数标记、大标记和日/月名称等内容。 - guess_integer
-
如果
TRUE
,猜测整数的整数类型,如果FALSE
猜测所有数字的数字类型。
注意
type_convert()
删除 'spec' 属性,因为它可能会修改列数据类型。 (有关列规格的更多信息,请参阅spec()
)。
例子
df <- data.frame(
x = as.character(runif(10)),
y = as.character(sample(10)),
stringsAsFactors = FALSE
)
str(df)
#> 'data.frame': 10 obs. of 2 variables:
#> $ x: chr "0.255144017515704" "0.378232647897676" "0.776657159207389" "0.56445694481954" ...
#> $ y: chr "10" "4" "6" "8" ...
str(type_convert(df))
#>
#> ── Column specification ──────────────────────────────────────────────────
#> cols(
#> x = col_double(),
#> y = col_double()
#> )
#> 'data.frame': 10 obs. of 2 variables:
#> $ x: num 0.255 0.378 0.777 0.564 0.84 ...
#> $ y: num 10 4 6 8 9 7 3 2 1 5
df <- data.frame(x = c("NA", "10"), stringsAsFactors = FALSE)
str(type_convert(df))
#>
#> ── Column specification ──────────────────────────────────────────────────
#> cols(
#> x = col_double()
#> )
#> 'data.frame': 2 obs. of 1 variable:
#> $ x: num NA 10
# Type convert can be used to infer types from an entire dataset
# first read the data as character
data <- read_csv(readr_example("mtcars.csv"),
col_types = list(.default = col_character())
)
str(data)
#> spc_tbl_ [32 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
#> $ mpg : chr [1:32] "21" "21" "22.8" "21.4" ...
#> $ cyl : chr [1:32] "6" "6" "4" "6" ...
#> $ disp: chr [1:32] "160" "160" "108" "258" ...
#> $ hp : chr [1:32] "110" "110" "93" "110" ...
#> $ drat: chr [1:32] "3.9" "3.9" "3.85" "3.08" ...
#> $ wt : chr [1:32] "2.62" "2.875" "2.32" "3.215" ...
#> $ qsec: chr [1:32] "16.46" "17.02" "18.61" "19.44" ...
#> $ vs : chr [1:32] "0" "0" "1" "1" ...
#> $ am : chr [1:32] "1" "1" "1" "0" ...
#> $ gear: chr [1:32] "4" "4" "4" "3" ...
#> $ carb: chr [1:32] "4" "4" "1" "1" ...
#> - attr(*, "spec")=
#> .. cols(
#> .. .default = col_character(),
#> .. mpg = col_character(),
#> .. cyl = col_character(),
#> .. disp = col_character(),
#> .. hp = col_character(),
#> .. drat = col_character(),
#> .. wt = col_character(),
#> .. qsec = col_character(),
#> .. vs = col_character(),
#> .. am = col_character(),
#> .. gear = col_character(),
#> .. carb = col_character()
#> .. )
#> - attr(*, "problems")=<externalptr>
# Then convert it with type_convert
type_convert(data)
#>
#> ── Column specification ──────────────────────────────────────────────────
#> cols(
#> mpg = col_double(),
#> cyl = col_double(),
#> disp = col_double(),
#> hp = col_double(),
#> drat = col_double(),
#> wt = col_double(),
#> qsec = col_double(),
#> vs = col_double(),
#> am = col_double(),
#> gear = col_double(),
#> carb = col_double()
#> )
#> # A tibble: 32 × 11
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
#> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
#> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
#> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
#> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
#> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
#> 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
#> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
#> 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
#> # … with 22 more rows
相关用法
- R readr datasource 创建源对象。
- R readr melt_delim 返回分隔文件中每个标记的熔化数据(包括 csv 和 tsv)
- R readr read_rds 读/写 RDS 文件。
- R readr read_lines 从文件中读取/写入行
- R readr parse_number 灵活地解析数字
- R readr read_fwf 将固定宽度文件读入 tibble
- R readr read_builtin 从包中读取内置对象
- R readr Tokenizers 分词器。
- R readr melt_table 返回空格分隔文件中每个标记的熔化数据
- R readr date_names 创建或检索日期名称
- R readr locale 创建语言环境
- R readr write_delim 将数据帧写入分隔文件
- R readr parse_vector 解析字符向量。
- R readr with_edition 暂时更改活动阅读器版本
- R readr read_delim 将分隔文件(包括 CSV 和 TSV)读入 tibble
- R readr format_delim 将 DataFrame 转换为分隔字符串
- R readr edition_get 检索当前活动版本
- R readr readr_example 获取 readr 示例的路径
- R readr melt_fwf 返回固定宽度文件中每个标记的熔化数据
- R readr count_fields 计算文件每一行中的字段数
- R readr read_table 将空格分隔的列读入 tibble
- R readr problems 检索解析问题
- R readr parse_guess 使用“最佳”类型进行解析
- R readr parse_datetime 解析日期/时间
- R readr read_file 读/写完整文件
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Re-convert character columns in existing data frame。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。