#r #dplyr
#r #dplyr
Вопрос:
Я хотел выбрать первые два дня каждой группы и назвать это 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. Возможно
top_n
?
Ответ №1:
Мы можем 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)