首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将分类列转换为数值列,定义函数?负载包?

将分类列转换为数值列,定义函数?负载包?
EN

Stack Overflow用户
提问于 2016-05-10 13:06:25
回答 1查看 116关注 0票数 0

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

数据

代码语言:javascript
复制
    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

代码语言:javascript
复制
    printer  user   numbers

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

问题是,我有34列,我不太高兴写同样的代码34次,所以我想这可以通过:

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

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

无论如何,任何暗示都会很感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-10 15:27:39

如果要将此函数应用于数据框架的列,则可以利用以下事实,即它实际上是一个列表。对于每个列或列表组件,如果它是一个因子,则希望将其转换为数字,并保留其他列(如果我正确理解的话)。我会举一个例子来说明这个问题:

代码语言:javascript
复制
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),但是默认情况下,列名会变得有点滑稽。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37139463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档