Rの列に要素を変換するためにデータフレームを再形成
質問
私は1つの特定の列が特定の値のセットを持つデータフレームを持っている(のは、1、2を言わせ、...、23)。私は何をしたいのフレームは、余分な23(この場合)の列、係数値の1つを表す各1を持っているでしょう1、このレイアウトから変換することです。これらの列のデータは...特定の行が指定された係数値を有していたかどうかを示す具体的な例を示すブール値であろう:
ソースフレームます:
ID DATE SECTOR
123 2008-01-01 1
456 2008-01-01 3
789 2008-01-02 5
... <more records with SECTOR values from 1 to 5>
希望の形式ます:
ID DATE SECTOR.1 SECTOR.2 SECTOR.3 SECTOR.4 SECTOR.5
123 2008-01-01 T F F F F
456 2008-01-01 F F T F F
789 2008-01-02 F F F F T
私は、ループ内でそれをやって何の問題もないが、私はより良い方法があることを望みました。これまでのところreshape()
は、所望の結果が得られませんでした。ヘルプははるかに高く評価されるだろう。
解決
私は、「値」と呼ばれる別の列を結合して、value = TRUE
を設定しようとするだろう。
df <- data.frame(cbind(1:10, 2:11, 1:3))
colnames(df) <- c("ID","DATE","SECTOR")
df <- data.frame(df, value=TRUE)
次に、リシェイプを行います:
reshape(df, idvar=c("ID","DATE"), timevar="SECTOR", direction="wide")
reshape
機能を使用しての問題は、欠損値のデフォルトはNA(あなたが反復処理し、FALSEに置き換える必要があります。その場合には)あるということです。
それ以外の場合は、あなたがcast
パッケージの外にreshape
使用することができます( / <たとえば、この質問を参照A>)、およびFALSE
するデフォルトを設定します。
df.wide <- cast(df, ID + DATE ~ SECTOR, fill=FALSE)
> df.wide
ID DATE 1 2 3
1 1 2 TRUE FALSE FALSE
2 2 3 FALSE TRUE FALSE
3 3 4 FALSE FALSE TRUE
4 4 5 TRUE FALSE FALSE
5 5 6 FALSE TRUE FALSE
6 6 7 FALSE FALSE TRUE
7 7 8 TRUE FALSE FALSE
8 8 9 FALSE TRUE FALSE
9 9 10 FALSE FALSE TRUE
10 10 11 TRUE FALSE FALSE
他のヒント
ここではより高速であってもなくてもよいxtabs
を使用して、別のアプローチがあります(誰かが試してみて、私に知らせてしまう場合):
df <- data.frame(cbind(1:12, 2:13, 1:3))
colnames(df) <- c("ID","DATE","SECTOR")
foo <- xtabs(~ paste(ID, DATE) + SECTOR, df)
cbind(t(matrix(as.numeric(unlist(strsplit(rownames(foo), " "))), nrow=2)), foo)
所属していません StackOverflow