首页 > 解决方案 > R - 根据条件排除参与者(超过 10% 的响应——变量:延迟——小于 300 毫秒)

问题描述

我正在尝试排除符合排除标准的数据(参与者):排除那些响应时间超过 10% 的人少于 300 毫秒。

所以只是让它更容易理解,这里是数据的一个例子(假的)(假设数据名称是 MyData):

structure(list(ID = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
), .Label = c("rladb11", "rladb7"), class = "factor"), blocknum = c(1L, 
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 1L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L, 4L), latency = c(322L, 277L, 243L, 188L, 
642L, 155L, 122L, 233L, 280L, 142L, 834L, 243L, 332L, 243L, 275L, 
432L, 524L, 534L, 143L, 533L, 242L, 234L, 523L, 142L)), class = "data.frame", row.names = c(NA, 
-24L))

所以我们有变量——ID、Block(1-4)、延迟。延迟测量了他们在正确响应之前所花费的时间。

我需要做的是排除响应太快以至于我们认为他们没有注意的参与者 (ID)。因此,其标准是,如果在第 2、3 块期间有超过10% 的响应时间小于 300ms,则它们将被排除在外。

然而,这里提供的数据是原始(假)数据。我们的主要数据——总结——是分开的。所以我们需要一份被排除在外的名单。

如何获取不符合条件的参与者 ID 的列表?

所以有了这个数据集,我们想看看结果,

rladb7

--------(旧)数据问题如下------------

我试图通过使用子集函数来做到这一点

如果latencyPercent 大于10%,则最后打印。

然后对所有 100~ 个参与者做同样的事情,找出那些做得太快的人。

但问题是:

  1. 仅将所有 100~ 个参与者的数据逐个子集以执行此排除方法,工作量太大——效率不高。
  2. 我不应该指望他们对第 1、4 块的响应(只需要第 2,3 块的响应)

我对 R 编程非常陌生,所以任何帮助都会非常有帮助和感激..!! 有没有人对如何有效排除这些有很好的建议?

标签: rdataframefiltersubset

解决方案


我们可以找到latency小于 300 的比率和 whereblocknum2:3每个ID,并且只保留比率大于 10% 的那些 ID。

library(dplyr)

Mydata %>%
   group_by(ID) %>%
   filter(mean(latency < 300 & blocknum %in% 2:3) > 0.1)


#    ID     blocknum latency
#   <fct>     <int>   <int>
# 1 rladb7        1     322
# 2 rladb7        2     277
# 3 rladb7        2     243
# 4 rladb7        2     188
# 5 rladb7        2     642
# 6 rladb7        2     155
# 7 rladb7        3     122
# 8 rladb7        3     233
# 9 rladb7        3     280
#10 rladb7        3     142
#11 rladb7        3     834
#12 rladb7        4     134

只得到ID,我们可以pull

Mydata %>%
  group_by(ID) %>%
  filter(mean(latency < 300 & blocknum %in% 2:3) > 0.1) %>% 
  distinct(ID) 

#    ID    
#  <fct> 
#1 rladb7

推荐阅读