2016-07-08 9 views
1

私は一意のIDとインタビュー日付の列を(他の中で)持つデータフレームを持っています。データフレームには、IDごとに多数の行があります。最初の2回のインタビューの日付の行をすべての世帯のIDごとに削除したい。日付に基づいて一意のIDごとに最初の2つのエントリを削除します

ありがとうございました!

EDIT:彼らはすべて最初の内に起こるように私は行1-4、7-9を削除し、11-14たいテーブルで

:ここで私が働いているものの一例です各IDのインタビュー日数は2回です。

dates=as.Date(c("1/1/12","1/1/12","1/5/12","1/5/12","1/7/12","1/7/12","2/1/12","2/1/12","2/5/12","6/1/12","6/3/12","6/3/12","6/4/12","6/4/12","6/15/12","6/15/12"),format='%m/%d/%y') 
    hh_id=c(1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3) 
    df<-data.frame(hh_id,dates) 
    arrange(df,hh_id,desc(dates)) 


hh_id dates 
1  1 1/7/12 
2  1 1/7/12 
3  1 1/5/12 
4  1 1/5/12 
5  1 1/1/12 
6  1 1/1/12 
7  2 6/1/12 
8  2 2/5/12 
9  2 2/1/12 
10  2 2/1/12 
11  3 6/4/12 
12  3 6/4/12 
13  3 6/3/12 
14  3 6/3/12 
15  3 6/15/12 
16  3 6/15/12 
+3

での更新に基づいて、元の列名/オブジェクト名


にそれを変更して、いくつかのコードとデータの '?dput'(おそらく唯一の数行を入力してください( '?head'を参照してください) – loki

+0

ありがとう - 私はちょうど上記の編集でそれを追加しました –

答えて

3

data.tableを使用できます。 'data.frame'を 'ID'でグループ化された 'data.table'(setDT(df1))に変換し、order '日付'を使用して、tail関数を使用して最初の2つの観測値を削除します。

library(data.table) 
setDT(df1)[order(date), tail(.SD, -2) , by = ID] 

注:

1)Dateクラスとして '日付' 列を想定しました。 Dateクラスに変換しない場合は、as.DateformatYYYY-MM-DDに含まれていない場合)を指定します。

2)列名とオブジェクト名は架空のものです。 OPのポスト

setDT(df)[df[order(dates), .I[!(dates %in% dates[1:2])] ,hh_id]$V1] 
+0

私は最初の2つのインタビュー日付を持つすべての行を削除するために、各hh_idの最初の2つの行だけでなく探しています。明快さの欠如のため申し訳ありません - 私は編集で私の質問を修正しました –

+0

@AshleyThomas投稿を更新しました – akrun

関連する問題