如何将任意字符串集映射到整数并返回到R中?

如何将任意字符串集映射到整数并返回到R中?,r,R,在任意数据集中都有字符串列,例如。G鸢尾属植物。为了最大似然(ML)的目的,我必须将它们转换成小整数(矩阵运算,所以仅限于数字),并在计算后将其反转。例如:{“setosa”->1,“versicolor”->2,“virginica”->3) 我遍历列并检查每个列的类型(第一个元素的模式)。如果它是字符(唯一有问题的模式),我想从该列中获得一组不同的值(例如Iris集中的3个物种),将它们映射到连续的整数(因此我将使用矩阵而不是数据帧),并在计算后将其反转(例如,将目标集中的预测值显示为字符串

在任意数据集中都有字符串列,例如。G鸢尾属植物。为了最大似然(ML)的目的,我必须将它们转换成小整数(矩阵运算,所以仅限于数字),并在计算后将其反转。例如:{“setosa”->1,“versicolor”->2,“virginica”->3)


我遍历列并检查每个列的类型(第一个元素的模式)。如果它是字符(唯一有问题的模式),我想从该列中获得一组不同的值(例如Iris集中的3个物种),将它们映射到连续的整数(因此我将使用矩阵而不是数据帧),并在计算后将其反转(例如,将目标集中的预测值显示为字符串,而不是任意映射的整数)。我想我需要一个列表映射列索引(我事先不知道哪些列将被映射)来映射特定列的(字符串->整数)。

执行以下操作:

fac <- factor(charvar)
num <- as.numeric(fac)
# Do some manipulation of num, producing newnum
newcharvar <- levels(fac)[newnum]
fac级别(fac)[newnum]
[1] setosa“花色”

执行以下操作:

fac <- factor(charvar)
num <- as.numeric(fac)
# Do some manipulation of num, producing newnum
newcharvar <- levels(fac)[newnum]
fac级别(fac)[newnum]
[1] setosa“花色”

由于虹膜物种已经是一个因子,所以您需要的是
作为.numeric(iris$species)
。如果列不是一个因子,而是一个字符,则需要首先将其转换为因子。好吧,iris只是一个示例,我必须处理任意数据,例如UCI存储库中的CSV文件(函数读取CSV读取字符列…以及字符)。我知道as.numeric(factor(col))技巧,但由于某些原因,它并不总是有效-并且没有提供一个映射,我可以用它将其反转。Is
data.matrix(iris)
你想要什么?在某种程度上-是的,它确实映射了它。但问题是将映射颠倒,将整数转换回字符串。我不能仅仅创建另一个矩阵来进行计算(因为这种方法非常简单和优雅),因为对于ML数据集,内存太多。如果
data.table
package可能是一个选项,它不会在处理数据时创建副本,例如,由于虹膜种类已经是一个因素,所以您只需要
As.numeric(虹膜$species)
。如果列不是一个因子,而是一个字符,则需要首先将其转换为因子。好吧,Iris只是一个例子,我必须处理任意数据,例如UCI存储库中的CSV文件(函数读取CSV读取字符列…以及字符)。我知道as.numeric(因子(col))技巧,但由于某些原因,它并不总是有效的-并且没有提供一个映射,我可以用它来反转。是
data.matrix(iris)
你想要什么?在某种程度上,它确实映射了它。但问题是将映射反转,整数返回字符串。我不能仅仅创建另一个矩阵用于计算(为此,该方法将非常简单和优雅),因为对于ML数据集,它会占用太多内存。如果
数据,则会发出声音。表
包可能是一个选项,在操作数据时它不会创建副本,请参见例如。