2017-03-02 38 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

相关问题