Как удалить строки данных в определенной категории в R - PullRequest
0 голосов
/ 31 августа 2018

У меня есть несколько Субъектов, которые пришли на три сессии - они выполнили задачу, которая дала мне несколько раз реакции. Вот примерный образец моих данных:

  Subject Session  Trial  Stim.ACC  Stim.OnsetTime Stim.RT
  1       1        1      1         1              700
  1       1        2      0         2              392
  1       1        3      1         3              322
  1       1        4      1         4              327
  1       1        5      1         5              403
  1       1        6      1         6              388
  1       1        7      1         7              328
  1       1        8      1         8              374
  1       2        1      1         1              700
  1       2        2      0         2              392
  1       2        3      1         3              322
  1       2        4      1         4              327
  1       2        5      1         5              403
  1       2        6      1         6              388
  1       2        7      1         7              328
  1       2        8      1         8              374

Мне интересно, есть ли способ удалить целые строки на основе номера сеанса и номера темы. то есть. Я хочу избавиться от первого сеанса субъекта 1, но не от второго.

Точно так же мне интересно, можно ли использовать матрицу предметов / сессий, которые я хочу удалить, чтобы я мог сделать все сразу. Например, все сразу удалите тему 1 сессию 1, тему 10 сессию 3, тему 12 сессию 2, тему 4 сессию 2 и т. Д.

Я чаще всего использую dplyr и tidyr для очистки данных, но готов принять любой ответ.

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Вот потенциальное решение последнего абзаца:

  library(tidyverse)
  set.seed(1234)

  df <- as.data.frame(cbind(rep(1,16),
                      cbind(rep(1:2,each = 8),
                      cbind(rep(1:8,2)),
                      cbind(sample(c(1,0),16,T),
                      cbind(rep(1:8,2),
                      sample(300:800,16))))))

  names(df) <- c("Subject","Session","Trial","Stim.ACC","Stim.OnsetTime","Stim.RT")

... создает это data.frame.

     Subject Session Trial Stim.ACC Stim.OnsetTime Stim.RT
  1        1       1     1        0              1     399
  2        1       1     2        1              2     730
  3        1       1     3        1              3     498
  4        1       1     4        0              4     376
  5        1       1     5        0              5     468
  6        1       1     6        0              6     482
  7        1       1     7        0              7     511
  8        1       1     8        0              8     392
  9        1       2     1        1              1     624
  10       1       2     2        1              2     752
  11       1       2     3        1              3     660
  12       1       2     4        1              4     732
  13       1       2     5        1              5     766
  14       1       2     6        1              6     395
  15       1       2     7        1              7     530
  16       1       2     8        0              8     487

Создайте bad data.frame или вектор:

 bad <- unite(data.frame(rbind(c(1,1),rbind(c(10,3),rbind(c(12,2),c(4,2))))))

 1  1_1
 2 10_3
 3 12_2
 4  4_2

Каждая пара является предметом и сеансом. Вы тоже можете сделать это вектором.

 bad <- c("1_1","10_3","12_2","4_2")

Затем создайте столбец «плохой код» и фильтр:

 df %>%
    unite(col = "badcode",c(Subject,Session),remove = F) %>%
    filter(!(badcode %in% bad[,1]))

Создайте список плохих пар субъекта и сеанса, а затем отфильтруйте по этому списку, используя эту последнюю строку (если это вектор, вам не нужно вводить с помощью [,1]).

0 голосов
/ 31 августа 2018

Мы группируем по 'Subject', filter 'Session', который не равен first 'Session', чтобы удалить все строки, которые не являются начальными 'Session' для каждого 'Subject'

library(dplyr)
df1 %>% 
    group_by(Subject) %>% 
    filter(Session != first(Session))

Если ОП хотел удалить первую строку для каждого «Субъекта»

df1 %>%
    group_by(Subject) %>%
    slice(-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...