将字符串转换为R中的唯一整数

时间:2012-12-08 15:36:11

标签: r

我有一个这种类型的数据框

string1,string2,value1
string3,string1,value2
string3,string5,value3
...
...

我会用独特的整数转换srings:

1,2,value1
3,1,value2
3,5,value3
...
...

我正在尝试使用c()运算符,将字符串转换为唯一的整数。问题是如何管理数据框的两列。我怎么能这样做?

2 个答案:

答案 0 :(得分:9)

如果要为字符串分配数字,而不是删除文本“字符串”,则可以使用已知级别的因子,然后强制使用数字。

d <- read.csv(header=TRUE, file=textConnection("a,b,c
string1,string2,value1
string3,string1,value2
string3,string5,value3"))

l=unique(c(as.character(d$a), as.character(d$b)))

d1 <- data.frame(a=as.numeric(factor(d$a, levels=l)), b=as.numeric(factor(d$b, levels=l)), c=d$c)
> d1
  a b      c
1 1 3 value1
2 2 1 value2
3 2 4 value3

请注意,所选的数值与字符串中的数字不一致,但每个字符串都有一个唯一的数字。

答案 1 :(得分:3)

以下是使用match的简单解决方案:

df <- read.csv(text="string1,string2,value1
string3,string1,value2
string3,string5,value3", header = FALSE)

cbind(sapply(df[-3], match, unique(unlist(df[-3]))), df[3])

  V1 V2     V3
1  1  3 value1
2  2  1 value2
3  2  4 value3

工作原理:两列的值都与这些列的唯一编号向量相匹配。这将返回他们的位置。