2017-02-10 10 views
0

私は、次の構造を有する(連続したペアから構築された)データフレームがあります。分割してデータフレームに列を追加 - R

Name Var1 Var2 Comments 
A  0.5  4  Zone1 
A1  0.9  5  Zone2 
B  0.3  55  Zone1 
B1  0.1  7  Zone2 
C  2  8  Zone1 
C  3  9  Zone2 
D  0.2  0.6  Zone1 
D  3  4  Zone2 

を、私はそれを分割し、次の構造を持つ新しいデータフレームに保存したいです:

Name Var1 Var2 Comments Name.1 Var3 Var4 Comments.1 
A  0.5  4  Zone1  A1  0.9  5  Zone2 
B  0.3  55  Zone1  B1  0.1  7  Zone2 
C  2  8  Zone1  C  3  9  Zone2 
D  0.2  0.6  Zone1  D  3  4  Zone1 

可能でしょうか?誰かが私を助けることができます。その後、

あなたはゾーンでデータを分割することができるはずおかげ

答えて

1

(私は... Comments.1でゾーン1が間違いであると仮定しています)とは一緒に戻ってそれらをCBIND:

wide<-cbind(df[df$Comments=="Zone1",],df[df$Comments=="Zone2",]) 

例のようにしたい場合は、列名を変更するだけです(例:2番目の列のName.1を取得するなど)

+0

ありがとうございます。本当にZone1はエラーでした。重複したヘッダー(Var1、Var2、Comments)を取得すると、Var1.1、Var2.1、およびComments.1という名前になる可能性があります(サーテ名を実行する方が簡単でしょう)。 – user2916044

+0

これは動作します:colnames(ワイド)< - c(colnames(df)、paste(colnames(df)、 "。1"、sep = ""))。このようなすべてのことを形や広がりで行うより良い方法があるかもしれません...私にとって難しいことは、あなたがゾーン1とゾーン2が一致するかどうかの明確な識別子がないように見えることです。名前の最初の文字と一致するもの.... – MPhD

+0

この方法では、データが誤ってソートされる可能性があります。それは、マッチしたゾーンをリンクする重要な変数を使ったほうがいいでしょう。そして、そこから広いフォーマットに行くためにtidyrやreshapeを使ってください... AkrunからArunによる重複した答えへのリンクに基づいて、あなたはライブラリ.dable); df(ID); df $ ID <-substr(df $ Name、1,1); df <-data.table(df)df $ ID <-substr(df $ Name、1,1)dcast(wide2、ID〜rowid(ID)、value.var = c "、" Var2 "、" Comments "、sep ="。 "))私は動作させるためにROWIDを取得することはできませんが、あなたは別の/より新しいバージョンのdata.tableが必要な場合がありますか?しかし、私はRをすぐに見つけ出すために再起動したくない...;) – MPhD

関連する問題