как вы можете подмножить последние значения фрейма данных в R?

avatar
jc2525
1 июля 2021 в 18:51
50
2
2

У меня есть большой фрейм данных, который выглядит примерно так в своей основной форме...

subject session 
1         1
2         1
3         1
1         2
2         2
3         2
1         3
2         3
3         3
1         4
2         4
3         4
1         5
2         5
3         5

Как я могу подмножить только последние 2 сеанса фрейма данных (т.е. сеансы 4 и 5)?

Примечание. Общее количество сеансов может меняться в зависимости от сценария, но я всегда буду смотреть только последние 2 сеанса.

Поэтому такого кода будет недостаточно для всех сценариев...

data <- subset(data, session == c(4,5))
Источник

Ответы (2)

avatar
akrun
1 июля 2021 в 18:52
7

Для более чем одного элемента используйте %in% вместо ==. Получите значения сеанса unique и верните последние два с помощью tail, создайте логическое выражение с %in% для поднабора

.
subset(data, session %in% tail(unique(session), 2))

Как упоминал @Greg в комментариях, если он должен быть основан на упорядоченном «сеансе», а значения столбца не отсортированы, выполните sort для элементов unique перед применением tail

subset(data, session %in% tail(sort(unique(session)), 2))
Greg
1 июля 2021 в 18:57
1

Я думаю, что OP хочет что-то, что всегда будет выбирать последние 2 сеанса (или, в более общем случае, последние сеансы n), независимо от того, сколько существует отдельных сеансов.

Greg
1 июля 2021 в 19:02
1

Возможно, также используйте sort(), необязательно, на тот случай, если OP захочет, чтобы последние два сеанса по номеру, а не по порядку появления.

jc2525
1 июля 2021 в 19:24
1

Благодарю вас! ответ Акруна сработал отлично

avatar
ThomasIsCoding
1 июля 2021 в 20:25
2

Вот еще одна базовая опция R

> subset(df, session >= sort(unique(session), decreasing = TRUE)[2])
   subject session
10       1       4
11       2       4
12       3       4
13       1       5
14       2       5
15       3       5

или

> subset(df, session >= -sort(-unique(session))[2])
   subject session
10       1       4
11       2       4
12       3       4
13       1       5
14       2       5
15       3       5