Удалить участников на основе определенных критериев - PullRequest
0 голосов
/ 02 января 2019

У меня есть эксперимент с многочисленными участниками и их выбором. Для простоты предположим следующее:

part<-c(1,1,1,2,2,2,3,3,3)
choice<-c(6,2,9,2,3,18,3,6,8)
study<-cbind(part,choice)

       part choice
 [1,]    1      6
 [2,]    1      2
 [3,]    1      9
 [4,]    2      2
 [5,]    2      3
 [6,]    2     18
 [7,]    3      3
 [8,]    3      6
 [9,]    3      8

Теперь я бы хотел полностью удалить некоторых участников. Например, те, кто сделал хотя бы один выбор выше 10. Итак, в приведенном выше примере, поскольку участник 2 сделал один выбор выше 10, я полностью исключаю его: окончательные данные должны выглядеть так:

      part choice
[1,]    1      6
[2,]    1      2
[3,]    1      9
[4,]    3      3
[5,]    3      6
[6,]    3      8

Как я могу это сделать?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 января 2019
removed = which(study[ , 2]>10);
study = study[!(study[ , 1] %in% study[removed, 1]), ];

study
     part choice
[1,]    1      6
[2,]    1      2
[3,]    1      9
[4,]    3      3
[5,]    3      6
[6,]    3      8

с этим кодом вам даже не нужно устанавливать какой-либо пакет.

0 голосов
/ 02 января 2019

Использование базы R, без необходимости загрузки пакетов.В примере используются имена переменных вместо позиции для лучшего обзора решения.

# Create object to be used in dataframe.
part   <- c(1,1,1,2,2,2,3,3,3)
choice <- c(6,2,9,2,3,18,3,6,8)
# Create dataframe.
study  <- data.frame(part, choice)

# Find rows in column [study$choice]
find_rows <- which(study$choice > 10)
# Find participant that matches [find_rows]
participant_to_be_deleted <- study[find_rows,1]

# Remove all rows that has found participant in [study$part].
result <- study[study$part!=participant_to_be_deleted,]
0 голосов
/ 02 января 2019
library(dplyr)
 study %>% 
   group_by(part) %>% 
   filter(max(choice)<10)
# A tibble: 6 x 2
# Groups:   part [2]
   part choice
  <dbl>  <dbl>
1     1      6
2     1      2
3     1      9
4     3      3
5     3      6
6     3      8
...