2016-09-20 3 views
0

私が世帯主に家庭内のすべての人の性別や年齢情報を尋ねた調査からのデータフレームimcdsを持っています。だから、世帯主は、人1になり、人々の残りの部分はこのように...人2、3、4 ...などのようになります。対応する性別および年齢と一致する「uniqid」。

uniqid Age1 Age2 Age3 Sex1 Sex2 Sex3 

1012501 9  7  5  1 2  1 
1012502 9  7  5  1 2  1 
1012503 9  7  5  1 2  1 
1012601 8  5  NA 2 1  NA 
1012602 8  5  NA 2 1  NA 

uniqidの最初の5つの数字は家庭用IDと最後です2つは人の識別子です。したがって、人1012503の年齢値がAge3(5)であり、セックスSex3(1)です。私は何をしたい、このような何かにデータフレームimcdsを再形成である:彼らの特派SexAge values.Theデータフレームで

uniqid Age Sex 

1012501 9  1  
1012502 7  2  
1012503 5  1  
1012601 8  2  
1012602 5  1 

uniqid 583個の変数の2095台のOBSを持っています。ループが必要ですか?私に何ができる?

答えて

0

'uniqid'列に6〜7文字の部分文字列を抽出し、行/列インデックス( 'ind')を作成し、 'Age'列と 'Sex'列から対応する要素を抽出し、 cbindをデータセットの最初の列に置き換えます。

ind <- cbind(1:nrow(df1), as.numeric(substr(df1$uniqid, 6,7))) 
Age <- df1[grep("Age", names(df1))][ind] 
Sex <- df1[grep("Sex", names(df1))][ind] 
df2 <- cbind(df1[1], Age, Sex) 
df2 
# uniqid Age Sex 
#1 1012501 9 1 
#2 1012502 7 2 
#3 1012503 5 1 
#4 1012601 8 2 
#5 1012602 5 1 
+0

ありがとう!それは素晴らしい仕事でした。しかし、私はどのようにdf自体を変更するのですか? 'Age'と' Sex'を元の 'imcds' data.frameの新しい列として追加するその後、 'Age1'、' Age2'、... 'Age7'を削除し、各uniqidの年齢と性別を持つ一意の列を1つ残してください。 CBIND(DF1 [1]、... '(私達はちょうど' DF1を行い、元のデータセットに新しい列を作成する必要がある場合tehのポストに –

+0

( "年齢"、 "性別")] < - リスト(年齢、性別) ' – akrun

+0

@GracielaCarrilloを更新[C - あなたは 'DF2 <持つ新しいオブジェクトを作成することができます@GracielaCarrillo – akrun

関連する問題