строки подмножества, вложенные в другую переменную

#r #filter #dplyr

Вопрос:

У меня есть набор данных

 dataframe <- data.frame(time = c(1,2.2,3,4.1,5.6,6.9,7,7.2,8.9,9.2,10,11,13,14,15),
               condition = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3),
               trial = c("A","A","A","B","B","A","A","A","B","B","A","A","A","B","B"))
 

Я хочу подмножествовать первые две time секунды trial в каждой condition , чтобы мои выходные данные выглядели так:

  time condition trial
1     1         1     A
2     2         1     A
3     4         1     B
4     5         1     B
5     6         2     A
6     7         2     A
7     9         2     B
8    10         2     B
9    11         3     A
10   13         3     A
11   14         3     B
12   15         3     B
 

Как я могу это сделать, используя логические операторы (например,<,>) в dplyr?

Комментарии:

1. Можете ли вы указать желаемый результат? Мне и так это не совсем ясно.

2. желаемый выход указан выше

3. Тогда мне непонятно, как вы хотите рассчитать свою выходную time переменную. Вы имеете в виду, что вам нужны первые две записи для каждого условия/испытания или действительно первые две секунды?

4. использовать group_by и slice_head(n =2)

5. Я хочу, чтобы первые две секунды или возможность указать любой период времени (например, время > 2 и время > Это было ясно? Я буду рад предоставить любые дополнительные подробности.

Ответ №1:

Чтобы вернуть первые две записи, вы можете сделать:

 library(dplyr)

dataframe %>%
  group_by(condition, trial) %>%
  slice_head(n = 2)
 

ВОЗВРАТ:

 # A tibble: 12 x 3
# Groups:   condition, trial [6]
    time condition trial
   <dbl>     <dbl> <chr>
 1   1           1 A    
 2   2.2         1 A    
 3   4.1         1 B    
 4   5.6         1 B    
 5   6.9         2 A    
 6   7           2 A    
 7   8.9         2 B    
 8   9.2         2 B    
 9  10           3 A    
10  11           3 A    
11  14           3 B    
12  15           3 B    
 

Чтобы вернуть первые две секунды, вы можете сделать

 dataframe %>%
  group_by(condition, trial) %>%
  filter(time <= min(time)   2)
 

ВОЗВРАТ:

 # A tibble: 14 x 3
# Groups:   condition, trial [6]
    time condition trial
   <dbl>     <dbl> <chr>
 1   1           1 A    
 2   2.2         1 A    
 3   3           1 A    
 4   4.1         1 B    
 5   5.6         1 B    
 6   6.9         2 A    
 7   7           2 A    
 8   7.2         2 A    
 9   8.9         2 B    
10   9.2         2 B    
11  10           3 A    
12  11           3 A    
13  14           3 B    
14  15           3 B    
 

Комментарии:

1. возвращение первых двух секунд решения было именно тем, что я искал. Спасибо!