2016-10-30 12 views
1

を使用して、またはデータを重複していない可能性があり、列を統合:のは、あなたがこのように見えるデータセットを持っているとしましょうR

  Vietnam Gulf War  Iraq War 
veteran1 1   0   0 
veteran2 0   1   0 
veteran3 0   0   1 
veteran4 0   1   1 # <---- Note this row 

あなたはデータフレーム内の他のカラムに影響を与えることなく、これらの列を統合します

  Service 
veteran1 1     
veteran2 2      
veteran3 3        
veteran4 2 # <---- Note this row 

どこ

    :そうのようなベテランは(それが彼らの左端の列を選んだ veteran4の場合のように)、それは一つだけを選ぶ必要がある2以上務めている場合
  • 1 = Vietnam2 = Gulf War3 = Iraq War
  • データフレームの他の多くの列がある
  • どのようRでこれを行うだろう:、彼らはこの

質問のいずれかによって影響を受けることはないでしょうか?

(注:他の無料のオープンソースプログラムでは簡単に行うことができる場合は、どのプログラムをどのように共有するか気軽にお尋ねください.320万行の大規模なデータセット、アメリカのコミュニティ調査

+2

何か> 0、 "first")、row.names = row.names(df)) '? – lukeA

答えて

3

あなたのデータを見ると、それは単純な問題と思われる:ベトナム> 0ならば、1を使用し、

を、そうでない場合は湾岸戦争は> 0であれば、その後2、そうでない場合は、イラクが> 0、その後3、それ以外の場合0

vietnam = c(1, 0, 0,0) 
gulfwar = c(0,1,0,1) 
iraq = c(0,0,1,1) 
df = data.frame(vietnam, gulfwar, iraq) 
df$service <- ifelse(df$vietnam > 0,1,ifelse(df$gulfwar>0,2,ifelse(df$iraq>0,3,0))) 
df 

結果:たぶん少し(他のソリューションに関して)複雑

 vietnam gulfwar iraq service 
    1  1  0 0  1 
    2  0  1 0  2 
    3  0  0 1  3 
    4  0  1 1  2 
+0

そのような単純な解決策です。私は、これを行うために 'tidyr'と' reshape2'を使って私が探検したところまでそれを思い描いていました。 –

1

が、ここでは一つのアプローチはapplyを使用している: `data.frame(サービス= max.col(DFのような

df$service <- apply(df, 1, function(x) which(x == 1)[1]) 
df 
    vietnam gulfwar iraq service 
1  1  0 0  1 
2  0  1 0  2 
3  0  0 1  3 
4  0  1 1  2 
関連する問題