2017-11-27 19 views
4

乱雑なデータのクリーンアップについて簡単な質問があります。私は複数の列を含む私に電子メールで送られたデータセットを持っています。各データセットにはコンマで区切られた数字の文字列が含まれています。伝統的に、これらの数値はそれぞれ独自の変数でなければなりませんが、これはデータセットが私に与えられる方法ではありません。ここではいくつかのデータの例である:rデータ列を複数の列に分割し、個々の変数でソート

indication treatment 
    1,2  3 
     2 2,1 
     1,3 2,3 

行のこれらの列と数千人の100に近く、かつこれらの列のそれぞれの変数の変化数を含むこれらのデータセットを想像してください。私の目標は、このようなデータセットをインポートし、文字列の各変数が独自の列にあるように各列を分割することですが、各列は各固有変数が独自の列にソートされるように分割されます。このような:

indication_1 indication_2 indication_3 treatment_1 treatment_2 treatment_3 
1 1 0 0 0 1 
0 1 0 1 1 0 
1 0 1 0 1 1 

注意列ヘッダは1変数の存在を示す2進数の0または1のように変更しており、数値が表示されていること。

Iveは問題を抱えていました。なぜなら、私が必要としていた分割関数は、必要な列の数を知り、分割後に変数を独自の列にソートしないからです。非常に複雑になり、文字列を含む個々の列ごとに別々のコードを書く必要があります。

Idは、文字列を含む列を取り、データを別々のソート列に分割し、これらの列をバイナリのyesまたはnoにして、列名を変更して元の列名と変数その列に私は個々の列の関数を書き直したり変更したりする必要はありません(すべての列が文字タイトルの数値文字列であると仮定します)。

ありがとうございます。

+0

答えは役に立つかもしれhttps://stackoverflow.com/questions/18474896/reshape-multiple-categorical-variables-to- binary-response-variables –

答えて

3

我々はstrsplitを行うことができ、その後、ここmtabulate頻度を取得

library(qdapTools) 
do.call(cbind, lapply(df, function(x) mtabulate(strsplit(x, ",")))) 
# indication.1 indication.2 indication.3 treatment.1 treatment.2 treatment.3 
#1   1   1   0   0   0   1 
#2   0   1   0   1   1   0 
#3   1   0   1   0   1   1 
+0

@Konrad 'strsplit'は、分割するために' character'クラスが必要です。デフォルトで 'data.frame'に' stringsAsFactors = FALSE'があるので 'factor'クラスがあります。' mtabulate(strsplit(as).character(x)、 "))' – akrun

+1

あなたは正しい、忘れてしまった: – Konrad

+0

Konrad、私は単純に自分のデータフレームを行列に変更しました。これにより、すべての列が数値になり、完全に機能しました。 –

関連する問題