R 在数据框列上应用函数
R Apply function on data frame columns
我在 R 中有一个函数可以将因子转换为数字:
as.numeric.factor <- function(x) {as.numeric(levels(x))[x]}
我有一个数据框,其中包含因素、数字和其他类型的数据。
我想在整个数据帧上立即应用上面的函数,将所有因素转换为数字类型的列。
任何想法 ?
谢谢
您可以通过is.factor
和sapply
来检查该列是否为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)
我在 R 中有一个函数可以将因子转换为数字:
as.numeric.factor <- function(x) {as.numeric(levels(x))[x]}
我有一个数据框,其中包含因素、数字和其他类型的数据。 我想在整个数据帧上立即应用上面的函数,将所有因素转换为数字类型的列。 任何想法 ? 谢谢
您可以通过is.factor
和sapply
来检查该列是否为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)