5

このタイプのデータフレームがあります

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

一意の整数で文字列を変換します。

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

文字列を一意の整数に変換する c() 演算子を試しています。問題は、データ フレームの 2 つの列をどのように管理するかです。これどうやってするの?

4

2 に答える 2

9

テキスト「string」を削除するのではなく、文字列に数値を割り当てたい場合は、既知のレベルの係数を使用してから、数値に強制することができます。

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 に答える