我中的R的函数打开因素数字:R于数据帧列应用功能
as.numeric.factor <- function(x) {as.numeric(levels(x))[x]}
和我有一个由两个因素,数字和其它类型的数据的数据帧一个。 我想在整个数据框上一次应用上述函数,将所有因子转换为数字类型列。 有什么想法? 谢谢
我中的R的函数打开因素数字:R于数据帧列应用功能
as.numeric.factor <- function(x) {as.numeric(levels(x))[x]}
和我有一个由两个因素,数字和其它类型的数据的数据帧一个。 我想在整个数据框上一次应用上述函数,将所有因子转换为数字类型列。 有什么想法? 谢谢
一种选择是:
dat[] <- lapply(dat, function(x) if(is.factor(x)) as.numeric(levels(x))[x] else x)
您可以检查列是否为factor
或者不是is.factor
和sapply
。使用它作为索引来过滤掉这些列,并通过lapply
循环中的as.numeric.factor
函数将列转换为“数字”。
indx <- sapply(dat, is.factor)
dat[indx] <- lapply(dat[indx], as.numeric.factor)
你也可以应用功能不使用子集(但如果将它放在一个子集,会更快)
为了防止列转换为“因素”,你可以指定stringsAsFactors=FALSE
参数或colClasses
参数在read.table/read.csv
范围内,我会想象这些列至少有一个非数字组件,它在读取数据集时自动将其转换为factor
。