R 在数据框列上应用函数

R Apply function on data frame columns

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

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

我有一个数据框,其中包含因素、数字和其他类型的数据。 我想在整个数据帧上立即应用上面的函数,将所有因素转换为数字类型的列。 任何想法 ? 谢谢

您可以通过is.factorsapply 来检查该列是否为factor。使用它作为索引来过滤掉那些列,并通过 lapply 循环中的 as.numeric.factor 函数将这些列转换为 "numeric"。

indx <- sapply(dat, is.factor)
dat[indx] <- lapply(dat[indx], as.numeric.factor)

您也可以在不进行子集化的情况下应用该函数(但在子集上应用它会更快)

为了防止将列转换为 "factor",您可以在 read.table/read.csv 中指定 stringsAsFactors=FALSE 参数或 colClasses 参数 我想列至少有单个非数字组件,在读取数据集时自动将其转换为 factor

一个选项是:

dat[] <- lapply(dat, function(x) if(is.factor(x)) as.numeric(levels(x))[x] else x)