2

この同様の質問からほとんどすべてを試しましたが、他の誰もが得ていると思われる結果を得ることができません。これは私の問題です:

私はこのようなデータフレームを持っており、各教師が扱う成績をリストしています:

> profs <- data.frame(teaches = c("1st", "1st, 2nd",
                                  "2nd, 3rd",
                                  "1st, 2nd, 3rd"))
> profs
        teaches
1           1st
2      1st, 2nd
3      2nd, 3rd
4 1st, 2nd, 3rd

teaches次のように、変数を列に分割するソリューションを探していました。

  teaches1st teaches2nd teaches3rd
1          1          0          0
2          1          1          0
3          0          1          1
4          1          1          1

私はライブラリを含むこの解決策を理解しており、回答者の説明を考えるsplitstackshapeと、明らかに非推奨の関数は私が望むことを正確に行うはずです。concat.split.expandedただし、同じ結果に到達できないようです。

> concat.split.expanded(profs, "teaches", fill = 0, drop = TRUE)
Fehler in seq.default(min(vec), max(vec)) : 
  'from' cannot be NA, NaN or infinite

を使用するcSplitと、「以前のほとんどの concat.split* 関数」に取って代わることがわかりました。次のようになります。

> cSplit(profs, "teaches")
   teaches_1 teaches_2 teaches_3
1:       1st        NA        NA
2:       1st       2nd        NA
3:       2nd       3rd        NA
4:       1st       2nd       3rd

cSplitのヘルプを使用して、これらのパラメーターをすべて微調整しようとしましたが、その分割を取得できません。助けていただければ幸いです。

4

4 に答える 4

2

あなたはmtabulateから試すことができますqdapTools

library(qdapTools)
res <- mtabulate(strsplit(as.character(profs$teaches), ', '))
colnames(res) <- paste0('teaches', colnames(res))
res
#    teaches1st teaches2nd teaches3rd
#1          1          0          0
#2          1          1          0
#3          0          1          1
#4          1          1          1

または使用してstringi

library(stringi)
(vapply(c('1st', '2nd', '3rd'), stri_detect_fixed, logical(4L), 
                          str=profs$teaches))+0L
#     1st 2nd 3rd
#[1,]   1   0   0
#[2,]   1   1   0
#[3,]   0   1   1
#[4,]   1   1   1
于 2015-03-17T14:43:15.987 に答える
0

回避策を見つけました。concat.split.expanded区切り記号と数字だけを含む文字列変数がある場合に機能するようです。つまり、次のようになります。

> profs <- data.frame(teaches = c("1", "1, 2", "2, 3", "1, 2, 3"))
> profs
  teaches
1       1
2    1, 2
3    2, 3
4 1, 2, 3

文字列変数からのダミー変数のconcat.split.expandedように動作するようになりました:

> concat.split.expanded(profs, "teaches", fill = 0, drop = TRUE)
  teaches_1 teaches_2 teaches_3
1         1         0         0
2         1         1         0
3         0         1         1
4         1         1         1

teachesただし、変数からすべての文字を削除する必要のない解決策をまだ探しています。

于 2015-03-17T14:27:56.360 に答える