2017-03-02 13 views
1

私はこのような何かを探していますSelect only the first rows for each unique value of a column in R しかし、IDごとの年の最初の値を含むすべての行を保持する必要があります。 itherの言葉では、最初の年のデータセットを個々のIDでサブセット化する必要があります。 IDは最初に 年を1,2または3年にすることができ、最初の年のすべての行を保持する必要があります。たとえば :別の列の一意の値ごとに最初の値を含むすべての行を抽出する

ID <- c("54V", "54V", "54V", "54V", "56V", "56V", "56V", "59V", "59V", "59V") 
    yr <- c(1, 1, 1, 2, 2, 2, 3, 1, 2, 3) 
    test <- data.frame(ID,yr) 
    test 

    ID yr 
1 54V 1 
2 54V 1 
3 54V 1 
4 54V 2 
5 56V 2 
6 56V 2 
7 56V 3 
8 59V 1 
9 59V 2 
10 59V 3 

期待される結果:

ID yr 
1 54V 1 
2 54V 1 
3 54V 1 
4 56V 2 
5 56V 2 
6 59V 1 

私のデータセットは、多くの列を持っていると私はそれらすべてを保持する必要があります。 Rでの指示やRでのsqldfは役立ちます!

+1

別のdplyrオプション: 'semi_join(テスト、ID、.keep_all = TRUE)、by = c(" ID "、" yr "))' –

答えて

1

我々はdplyr

library(dplyr) 
test %>% 
    group_by(ID) %>% 
    filter(yr==first(yr)) 
# ID yr 
# <fctr> <dbl> 
#1 54V  1 
#2 54V  1 
#3 54V  1 
#4 56V  2 
#5 56V  2 
#6 59V  1 

それともdata.table

library(data.table) 
setDT(test)[, .SD[yr==yr[1L]], ID] 

それともbase R

test[with(test, as.logical(ave(yr, ID, FUN = function(x) x==x[1L]))),] 
を使用してを使用してこれを行うことができます10
+1

いつものように速くて機能的な答えです。 – Lisarv

関連する問題