我使用此过程将分类值转换为使用级别的数值,并从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 <- NULLnew.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代码转换成函数,我也不知道这种转换在任何库中是否可用。
无论如何,任何暗示都会很感激的。
发布于 2016-05-10 15:27:39
如果要将此函数应用于数据框架的列,则可以利用以下事实,即它实际上是一个列表。对于每个列或列表组件,如果它是一个因子,则希望将其转换为数字,并保留其他列(如果我正确理解的话)。我会举一个例子来说明这个问题:
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),但是默认情况下,列名会变得有点滑稽。
https://stackoverflow.com/questions/37139463
复制相似问题