我正在使用此过程使用级别将分类值转换为数值,并从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代码转换为函数,我不知道这种转换是否可以在任何库中使用。
无论如何,任何提示都会非常感激。
答案 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)
,但默认情况下,列名称会变得有点滑稽。