5

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

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

我会将 srings 转换为唯一整数:

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

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

4

2 回答 2

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

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

于 2012-12-08T15:50:33.303 回答
4

这是一个简单的解决方案,使用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

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

于 2012-12-08T16:36:48.243 回答