2017-03-02 25 views
1

我正在尋找類似Select only the first rows for each unique value of a column in R 的東西,但我需要保留包含每個ID的年份的第一個值的所有行。 用其他字母表示,我需要在列出的第一年對數據集進行子集劃分,並使用個人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),通過= C( 「ID」, 「年」))' –

回答

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

由於@akrun,快速和功能答案照常! – Lisarv

相關問題