0

このファイルを R の data.frame に読み込んだところ、5 番目の列に「;」で区切られた値が含まれていることがわかります。この data.frame をはるかに大きな data.frame に変換し、5 番目の列をバイナリ ベクトルに展開することは可能ですか?

> head(uinfo)
      V1   V2 V3  V4                             V5
1 100044 1899  1   5    831;55;198;8;450;7;39;5;111
2 100054 1987  2   6                              0
3 100065 1989  1  57                              0
4 100080 1986  1  31 113;41;44;48;91;96;42;79;92;35
5 100086 1986  1 129                              0
6 100097 1981  1  75                              0

したがって、より簡単な例として、最初の 2 行が次の場合:

1 100044 1899  1   5    1;2;4;7
2 100054 1987  2   6    3;8

私は手に入れたい:

1 100044 1899  1   5    1 1 0 1 0 0 1 0 0 0
2 100054 1987  2   6    0 0 1 0 0 0 0 1 0 0

データの前処理に python などの別のプログラムを使用する必要がありますか、それとも何らかの適用関数で行うことは可能ですか?

ありがとう

4

3 に答える 3

1

基本関数の使用 (手順が多すぎると思います)

> df <- read.table(text=" 100044 1899  1   5    1;2;4;7
+  100054 1987  2   6    3;8", header=F, stringsAsFactors=F) # data.frame


> pos <- sapply(strsplit(as.character(df[,5]), ";"), as.numeric)
> x <-rep(0, max(unlist(pos)))
> cbind(df, t(sapply(pos, function(y) replace(x, y, 1))))
      V1   V2 V3 V4      V5 1 2 3 4 5 6 7 8
1 100044 1899  1  5 1;2;4;7 1 1 0 1 0 0 1 0
2 100054 1987  2  6     3;8 0 0 1 0 0 0 0 1
于 2013-10-06T17:13:27.407 に答える