如何将数据帧列转换为数字类型?
当前回答
使用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"
其他回答
如果x是dataframe dat的列名,x的类型是factor,使用:
as.numeric(as.character(dat$x))
要将数据帧列转换为数字,你只需要做:-
因数转换为数字:-
data_frame$column <- as.numeric(as.character(data_frame$column))
蒂姆是对的,谢恩有个遗漏。以下是其他例子:
R> df <- data.frame(a = as.character(10:15))
R> df <- data.frame(df, num = as.numeric(df$a),
numchr = as.numeric(as.character(df$a)))
R> df
a num numchr
1 10 1 10
2 11 2 11
3 12 3 12
4 13 4 13
5 14 5 14
6 15 6 15
R> summary(df)
a num numchr
10:1 Min. :1.00 Min. :10.0
11:1 1st Qu.:2.25 1st Qu.:11.2
12:1 Median :3.50 Median :12.5
13:1 Mean :3.50 Mean :12.5
14:1 3rd Qu.:4.75 3rd Qu.:13.8
15:1 Max. :6.00 Max. :15.0
R>
我们的data.frame现在有了因子列的摘要(counts)和as.numeric()的数值摘要(这是错误的,因为它得到了数值因子级别)以及as.numeric(as.character())的(正确的)摘要。
有一点对我很有帮助:如果要转换的变量范围(或者不止一个),可以使用sapply。
有点荒谬,举个例子:
data(cars)
cars[, 1:2] <- sapply(cars[, 1:2], as.factor)
假设第3列、第6-15列和第37列的数据帧需要转换为数字:
dat[, c(3,6:15,37)] <- sapply(dat[, c(3,6:15,37)], as.numeric)
使用下面的代码,您可以将所有数据帧的列转换为数字(X是我们想要转换它的列的数据帧):
as.data.frame(lapply(X, as.numeric))
要将整个矩阵转换为数字,你有两种方法: :
mode(X) <- "numeric"
or:
X <- apply(X, 2, as.numeric)
你也可以使用数据。矩阵函数将所有内容转换为数字,尽管要注意,因子可能无法正确转换,因此先将所有内容转换为字符会更安全:
X <- sapply(X, as.character)
X <- data.matrix(X)
如果我想同时转换成矩阵和数字,我通常使用最后一个