我在R中有一个函数将因子转换为数字:
as.numeric.factor <- function(x) {as.numeric(levels(x))[x]}
我有一个数据框,包括数字和其他类型的数据。 我想在整个数据帧上立即应用上述函数,将所有因子都转换为数字类型列。 任何的想法 ? 感谢
答案 0 :(得分:1)
您可以factor
和is.factor
检查该列是否为sapply
。使用它作为索引来过滤掉这些列,并在as.numeric.factor
循环中通过lapply
函数将列转换为“数字”。
indx <- sapply(dat, is.factor)
dat[indx] <- lapply(dat[indx], as.numeric.factor)
您也可以在没有子集的情况下应用该函数(但在子集上应用它会更快)
为了防止将列转换为“factor”,您可以在stringsAsFactors=FALSE
中指定colClasses
参数或read.table/read.csv
参数我想象列中至少有一个非数字组件,在读取数据集时自动将其转换为factor
。
答案 1 :(得分:0)
一种选择是:
dat[] <- lapply(dat, function(x) if(is.factor(x)) as.numeric(levels(x))[x] else x)