Отфильтруйте первые n дней из каждой группы - PullRequest
0 голосов
/ 06 марта 2019

Я хотел выбрать первые два дня каждой группы и назвать их data3.

Вот мои данные:

x <- c("1jan1960", "1jan1960", "2jan1960", "3jan1960",
       "1jan1960", "2jan1960", "3jan1960", "3jan1960","4jan1960", "4jan1960",
       "1jan1960", "2jan1960", "2jan1960", "3jan1960","3jan1960", "4jan1960", "5jan1960", "5jan1960","6jan1960",
       "1jan1960", "2jan1960", "3jan1960", "30jan1960",
       "1jan1960", "1jan1960", "2jan1960", "3jan1960","3jan1960", "4jan1960")
z <- as.Date(x, "%d%b%Y")
set.seed(0302)
data<- data.frame(id=c(1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5),
                  glucose=rnorm(29,100,5),
                  date=z)

data2<- data %>% group_by(id) 

1 Ответ

1 голос
/ 06 марта 2019

Мы можем filter минимум и минимум + 1 date от каждой группы.

library(dplyr)

data3 <- data %>%
  group_by(id) %>%
  filter(date %in% c(min(date), min(date) + 1))

data3

#      id glucose  date      
#   <dbl>   <dbl> <date>    
# 1     1   101.  1960-01-01
# 2     1   102.  1960-01-01
# 3     1    98.7 1960-01-02
# 4     2   103.  1960-01-01
# 5     2   105.  1960-01-02
# 6     3   103.  1960-01-01
# 7     3    92.6 1960-01-02
# 8     3    96.3 1960-01-02
# 9     4    96.4 1960-01-01
#10     4   102.  1960-01-02
#11     5   101.  1960-01-01
#12     5    95.7 1960-01-01
#13     5    94.5 1960-01-02

Или, как предлагает @NelsonGon, использовать top_n

data3 <- data %>% group_by(id) %>% top_n(-2, date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...