要将分类列转换为数字列¿定义函数?¿加载包?

时间:2016-05-10 13:06:26

标签: r

我正在使用此过程使用级别将分类值转换为数值,并从reshape2库中合并。 (为简洁起见,只显示了两列)

数据

    printerM  user

    RICOH     Pam
    CANON     Clara
    TOSHIBA   Joe
    RICOH     Fred
    CANON     Clark

printers.df <- data.frame(printers=unique(data$printerM))
numbers.df <- data.frame(numbers=1:length(unique(data$printerM))
printers.table <- as.data.frame(cbind(printers.df, numbers.df))
library(reshape2)
new.data<- merge(data, printers.table)
new.data$printers <- NULL

new.data

    printer  user   numbers

    RICOH     Pam      1
    CANON     Clara    2
    TOSHIBA   Joe      3
    RICOH     Fred     1      
    CANON     Clark    2

问题是我有34列,我不是很乐意写34次相同的代码,所以我想这可以通过以下方式处理:

1.-将我的代码转换为函数 2.-使用现有的R函数

我不太擅长将我的R代码转换为函数,我不知道这种转换是否可以在任何库中使用。

无论如何,任何提示都会非常感激。

1 个答案:

答案 0 :(得分:0)

如果要将此函数应用于数据框的列,则可以使用它实际上是下面的列表这一事实。对于每个列或列表组件,如果它是一个因子,您希望转换为数字,如果我理解正确,则保留其他列。我将给出一个虚拟的例子:

df = data.frame(sample(letters[1:5],10,replace=TRUE),
                runif(10),
                sample(LETTERS[1:5],10,replace=TRUE),
                sample(letters[11:15],10,replace=TRUE))
colnames(df) = paste0("X",1:4)
data.frame(lapply(df, function(x) if(is.factor(x)) as.numeric(x) else x))

修改

请注意,这会更改所有列的因素,因为它会检查每列是否是一个因子,如果是,则返回该因子强制转换为数字,否则返回原始列。也可以使用新的数字编码保留原始因子,您可以使用list(x,as.numeric(x))代替as.numeric(x),但默认情况下,列名称会变得有点滑稽。