2017-06-29 11 views
0

私はuniue idに従ったデータを持っており、訪問日にソートされています。一部の人は複数回訪問します。データは訪問によって並べ替えられた長い形式です。私は各人の最後の訪問の行を複製するだけです。データフレーム内の特定の行だけをどのように複製するのですか?私たちはそれぞれの「ID」のための「訪問」に基づいて、最後の行を複製する必要がある場合はデータフレーム内の特定の行のみを複製/複製する

id visit    glucose 
1  12 Jan 2015  12 
1  3 Feb 2015  8 
2  1 Feb 2015  13 
3  12 Jan 2015  7 
3  4 Feb 2015  13 
3  1 March 2015 8 
+0

それぞれ「ID」のためにのみ最後の行をしたい場合は、各IDの最後の日付を維持する意味ですか? 'df [duplicated(df $ id)] 'と同様に'? – Sotos

答えて

1

、我々はdata.tableを使用することができます。 'data.table' から 'data.frame'(setDT(df1))、 'ID' によってorder、そして '訪問' を変換し、 'ID' によってグループ化され、我々は

library(data.table) 
setDT(df1)[order(id, as.Date(visit, "%d %b %Y")), .SD[c(seq_len(.N), .N)], by = id] 
# id   visit glucose 
#1: 1 12 Jan 2015  12 
#2: 1 3 Feb 2015  8 
#3: 1 3 Feb 2015  8 
#4: 2 1 Feb 2015  13 
#5: 2 1 Feb 2015  13 
#6: 3 12 Jan 2015  7 
#7: 3 4 Feb 2015  13 
#8: 3 1 March 2015  8 
#9: 3 1 March 2015  8 

.N)最後の行を複製します

我々は

setDT(df1)[order(id, as.Date(visit, "%d %b %Y")), .SD[.N], id] 
+0

この最後のオプションは、 –

+0

タブ<-setDT(t)[order(id、as.Date(dcdate))、.SD [c(seq_len(.N)、。ファイルがExcelからインポートされたので、日付はOKでした。 –

+0

@PaulRheederコメントありがとうございます。 [ここ](https://www.google.co.in/?gfe_rd=cr&ei=ysFUWYO5DuWK8QfAiZO4Dg#q=stackoverflow+accept+answer)にチェックを入れることもできます。 – akrun