如何将数据帧列转换为数字类型?
当前回答
如果x是dataframe dat的列名,x的类型是factor,使用:
as.numeric(as.character(dat$x))
其他回答
Df列出你的数据框架。X是要转换的df的一列
as.numeric(factor(df$x))
如果x是dataframe dat的列名,x的类型是factor,使用:
as.numeric(as.character(dat$x))
要将数据帧列转换为数字,你只需要做:-
因数转换为数字:-
data_frame$column <- as.numeric(as.character(data_frame$column))
与hablar::转换
要轻松地将多个列转换为不同的数据类型,可以使用hablar::convert。简单的语法:df %>% convert(num(a))将列a从df转换为数值。
详细的例子
让我们将mtcars的所有列转换为字符。
df <- mtcars %>% mutate_all(as.character) %>% as_tibble()
> df
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 21 6 160 110 3.9 2.62 16.46 0 1 4 4
2 21 6 160 110 3.9 2.875 17.02 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.61 1 1 4 1
与hablar::转换:
library(hablar)
# Convert columns to integer, numeric and factor
df %>%
convert(int(cyl, vs),
num(disp:wt),
fct(gear))
结果:
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<chr> <int> <dbl> <dbl> <dbl> <dbl> <chr> <int> <chr> <fct> <chr>
1 21 6 160 110 3.9 2.62 16.46 0 1 4 4
2 21 6 160 110 3.9 2.88 17.02 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.61 1 1 4 1
4 21.4 6 258 110 3.08 3.22 19.44 1 0 3 1
使用type.convert()和rapply()的通用方式:
convert_types <- function(x) {
stopifnot(is.list(x))
x[] <- rapply(x, utils::type.convert, classes = "character",
how = "replace", as.is = TRUE)
return(x)
}
d <- data.frame(char = letters[1:5],
fake_char = as.character(1:5),
fac = factor(1:5),
char_fac = factor(letters[1:5]),
num = 1:5, stringsAsFactors = FALSE)
sapply(d, class)
#> char fake_char fac char_fac num
#> "character" "character" "factor" "factor" "integer"
sapply(convert_types(d), class)
#> char fake_char fac char_fac num
#> "character" "integer" "factor" "factor" "integer"