2016-09-04 14 views
-2

例:参加と秩序の列

a b p.a p.b 
1 2 x  y 
3 4 c  d 
2 1 y  x 
5 6 f  e 
1 1 x  x 

私はa一対のbbaのすべてのペアが発生した場合でなければなりませんようにp.ap.babのプロパティ)に参加したいと思いますabのペアになり、プロパティの順序を保持してから新しい列に結合する必要があります。したがって、最初の2つの列が変更された場合のみ、最後の2つの列も変更する必要があります。 pasteを使用して2つの列を結合することができますが、列の項目の順序を正しく取得する方法がわかりません。次のように

結果は次のようになります

a b p.a p.b joined 
1 2 x  y  xy 
3 4 c  d  cd 
1 2 x  y  xy 
5 6 f  e  fe 
1 1 x  x  xx 

それはabの行が1 2又は2 1であるが、存在する場合1 2ない2 1及びその逆

があってはならないかどうか、重要ではありません
+0

実際には可能なバリエーションを示すデータが必要です。あなたが持っているものは 'paste0'で解決できるかもしれませんが、必要なロジックのようには聞こえません。 – alistaire

+0

私はそこにあるすべてのものだと思います。私は1,2,3,4とc、d、x、yよりも多くの要素を持っています。 @akrunによる解決策は、私が必要としているようです。 – doc

+0

@alistaire特定のケースをどのように処理したいのかわからない場合は、どちらのケースですか?私はそれをもっと明確にするためにテーブルを完成させたいと思います。 – doc

答えて

1

更新されたデータセットを使用して、行をループして、最初の2つの列要素に基づいてorderを取得し、それに基づいてorder列を取得できます。

df2 <- do.call(rbind, lapply(seq_len(nrow(df1)), function(i) { 
       x1 <- df1[i,] 
       i1 <- order(unlist(x1[1:2])) 
       x1[1:2] <- unlist(x1[1:2])[i1] 
       x1[3:4] <- unlist(x1[3:4])[i1] 
       x1})) 

df2$joined <- do.call(paste0, df2[3:4]) 
df2 
# a b p.a p.b joined 
#1 1 2 x y  xy 
#2 3 4 c d  cd 
#3 1 2 x y  xy 
#4 5 6 f e  fe 
#5 1 1 x x  xx 
+0

だから、問題があります。最初の解決策を見てください.3番目と4番目の列は、1番目と2番目の列が変更された場合にのみ変更する必要があります。私が見ている限り、 'a、b'と' p.a、p.b'はアルファベット順に変更されています。しかし、 'p.a'と' p.b'は 'a'と' b'のプロパティです。したがって、 '1 2 y x'の場合、' 1 2 x y'に変更されます。 – doc

+0

@doc新しいデータセットでソリューションを更新しました。 2番目の解を適用すると、期待される出力が得られます。 – akrun

+0

いいえ、4行目が違っています。 'f 6'が変更された場合にのみ 'f 6'が変化するため、出力は '5 6 f e fe'になります。 '5 6'は変わらないので変更しないでください' f e' – doc

関連する問題