2016-12-11 9 views
2

を働いていない提供される解決策私はこのスレッドでは、ユーザーが何をしようとしていた正確に何をやろうとしている:ローの選択 -

Select specific rows based on previous row value (in the same column)

基本的な考え方があります列タイプの値40を持つ行の直後にある列タイプの値20を持つすべての行を選択します。最終的な結果は、列タイプに20または40の値を持つ行のみを持つデータフレームでなければなりません。

提供される解決策は次のようになります。

# Get indices of rows that meet condition 
ind2 <- which(df$Type==20 & dplyr::lag(df$Type)==40) 
# Get indices of rows before the ones that meet condition 
ind1 <- which(df$Type==20 & dplyr::lag(df$Type)==40)-1 

これは動作し、私は右の行が選択されていることがわかります。

しかし、データ

df[c(ind1,ind2)] 

をサブセット化の最終段階は、エラーメッセージを返します。

Error in `[.data.frame`(df, c(ind1, ind2)) : undefined columns selected 

なぜこれが起こっている私が把握することはできません。これを過ぎるためのアイデアは高く評価されます!

+1

'df [c(ind1、ind2)、]'多分? – Abdou

答えて

0

正しくアブドーは述べました:df[c(ind1,ind2)]は不完全です。 行列またはデータフレームを使用するときは、角括弧は[ rows , columns ]を示します。

データフレームに、ind1 and ind2の組み合わせを選択するよう指示された場合は、行または列のいずれかに見えるように指定する必要はありません。その結果、エラーが発生しました。具体的には、Rはind1ind2の仕様に基づいて列を調べることを検討します。

df[c(ind1,ind2),]dfと単に明示すると、必要な値を含むすべての行が表示されます。

+0

説明が正しくありません。 'df [c(ind1、ind2)]'などの1つのベクトルだけでdata.frameを索引付けすることは、有効なコードであり、それらの列が存在する限り動作します。 (対照的に、data.tablesはこれを行のみのインデックスとして扱いますが、例では間違いかもしれません) – ping

+0

これは正しいです、私は単に行を取得したいので、私はそれを示していました。だから、私はそれが不完全だと言ったのです。また、 'ind1'と' ind2'という名前の列はデータに存在しないためです。 –

+0

はい、ミドルセクションが間違っている/誤解を招き、混乱を避けるために削除する方がよいでしょう。コードは列を見て(あなたが示唆している通りではない)、Rが最初に行を探しているわけではありません - あなたは行を全く見ていません。 – ping

関連する問題