为另一列的每个唯一值提取包含第一个值的所有行

时间:2017-03-02 09:27:46

标签: r subset sqldf

我正在寻找与此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 个答案:

答案 0 :(得分: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]))),]