2016-08-30 19 views
-1

次の行のカラムの値と値の異なる列に基づいて行をマージ:「から」と「から」Iは、2つの列のデータフレームを有する

From To 
a  b 
b  c 
c  d 
e  f 

私は「から」かどうかを確認したいです次の行は、現在の行の「To」と同じです。そうであれば、現在の行の「To」を次の「To」で置き換えることができる。また、次の行を削除することもできます。

これは、次の行の "From"と同じ "To"行がなくなるまで続行する必要があります。

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

From To 
a  d 
e  f 

を私はここにこだわっている... ...

endresultが達成されるように、行を削除/渡す方法を見つけ出すことはできません
+0

こんにちはWimpel、どのステップであなたは立ち往生していますか?あなたが使用するコードを表示できますか? – Llopis

答えて

1

このコードはあなたの例で使用できます。

data.frame("From"=df$From[c(TRUE, head(df$To, -1) != tail(df$From, -1))], 
      "To"=df$To[c(head(df$To, -1) != tail(df$From, -1), TRUE)]) 
    From To 
1 a d 
2 e f 

これは、要素の最初の要素への最後を含み、要素に先行有する要素からの後続の比較すること、からとベクトルの順序を相殺することによって機能します。

+0

これはうまくいくようです:)今はどのように動作するのか把握する必要があります。 – Wimpel

+0

もっと良いアイデアを得るには、 'c(head(df $ To、-1)'と 'tail(df $論理ベクトルとして意味を持たなければなりません。この論理ベクトルは、 '' $ '' '、 '' -1' df $ To 'とする。 – lmo

1

これはうまくいくと思います。

データフレームを行ごとに別々の要素に分割しています(c(t(df)))。 rleを使用して、2つの連続する値を持つ要素を見つけ出し、それらを削除します(x$lengths != 2)。残りの要素をncol = 2で再びデータフレームにすることは、ここには2つの列しかないことがわかります。

x <- rle(c(t(df))) 
setNames(data.frame(matrix(x$values[x$lengths != 2],ncol = 2,byrow = T)), c("From", "To")) 

# From To 
#1 a d 
#2 e f 

コーナーケースが見つかった場合は、これが動作しない場合があります。

関連する問題