我有一个这种类型的数据框
string1,string2,value1
string3,string1,value2
string3,string5,value3
...
...
我会用独特的整数转换srings:
1,2,value1
3,1,value2
3,5,value3
...
...
我正在尝试使用c()运算符,将字符串转换为唯一的整数。问题是如何管理数据框的两列。我怎么能这样做?
答案 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
工作原理:两列的值都与这些列的唯一编号向量相匹配。这将返回他们的位置。