R在数据框列上应用函数

时间:2015-01-07 11:41:38

标签: r dataframe apply numeric

我在R中有一个函数将因子转换为数字:

    as.numeric.factor <- function(x) {as.numeric(levels(x))[x]}

我有一个数据框,包括数字和其他类型的数据。 我想在整个数据帧上立即应用上述函数,将所有因子都转换为数字类型列。 任何的想法 ? 感谢

2 个答案:

答案 0 :(得分:1)

您可以factoris.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)