#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. возвращение первых двух секунд решения было именно тем, что я искал. Спасибо!