2017-07-04 16 views
0

通常の転置関数ではなくループを使用してデータを転置したいので、未使用の変数とデータをマージする必要はありません。私が持っているマクロでデータを転置する

データは以下の通りです:

次の結果得られ
df1 <- data.frame(ID=c(1:4), Amount=c(100, 150, 75, 50), 
    Month=c("Jan", "Feb", "Mar", "Apr")) 

ID Amount Month 
1 100 Jan 
2 150 Feb 
3  75 Mar 
4  50 Apr 

私はこのようになり、最終的な結果を希望:

ID Amount Jan Feb Mar Apr 
1 100 1 0 0 0 
2 150 0 1 0 0 
3  75 0 0 1 0 
4  50 0 0 0 1 

IをSASでこれを行う方法を知っていましたが、Rで解決策を見つけることができませんでした。あなたの助けに感謝します。

答えて

1
library('tidyr') 
df1 <- data.frame(ID=c(1:4), Amount=c(100, 150, 75, 50), 
        Month=c("Jan", "Feb", "Mar", "Apr")) 
df1$ID <- 1 
df1 <- spread(df1 , Month, ID, fill=0) 
df1 

はになります。ここでは

Amount Apr Feb Jan Mar 
1  50 1 0 0 0 
2  75 0 0 0 1 
3 100 0 0 1 0 
4 150 0 1 0 0 
+0

base Rオプションです') ' –

1

あなたは `tidyr`がインストールされていない場合は` install.packagesは( 'tidyrを試してみてください、table

cbind(df1, as.data.frame.matrix(table(lapply(df1[-1], 
         function(x) factor(x, levels = unique(x)))))) 
関連する問題