【问题标题】:R - Exclude participants based on the condition (more than 10% of their response--variable:latency-- is less than 300ms)R - 根据条件排除参与者(超过 10% 的响应——变量:延迟——小于 300 毫秒)
【发布时间】:2020-09-02 22:19:39
【问题描述】:

我正在尝试排除符合排除标准的数据(参与者):排除超过 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% 的响应 小于 300 毫秒,他们将被排除在外。

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

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

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

rladb7

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

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

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

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

但问题是:

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

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

【问题讨论】:

  • 请使用dput 添加数据并显示相同的预期输出。请阅读有关how to ask a good question 的信息以及如何提供reproducible example
  • @RonakShah 我无法提供真实数据,因为这将侵犯隐私和机密性......目前一切都非常模糊,因为我对那里的功能知之甚少。这就是为什么我要解释这些概念并给出一个“例子”并希望有任何建议。所以,我的简单问题是(也许这会是一个更好和简单的问题)我怎样才能排除参与者/ID(每个人在整个多行)不符合条件的人(第 2、3、4 块中超过 10% 的响应为
  • 好吧,您分享的“示例”应该使用dput 分享,而不是像我在第一条评论中发布的链接中解释的那样作为图像分享。我们需要数据来测试我们的解决方案。我们不能使用图像来测试它。
  • 我明白了!我刚刚使用 dput 添加了一个数据示例!

标签: r dataframe filter subset


【解决方案1】:

我们可以找到小于 300 的latency 的比率,其中blocknum2: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

【讨论】:

  • 非常感谢!不幸的是,第二个不起作用。我已按照您的建议使用 dput 上传了我的假数据集,并编辑了问题以使其更清晰!
  • 对不起,我的没得救。但现在他们在那里。我已经使用 dput 添加了我的假数据。如何获取不符合条件的参与者ID列表?此外,我们只需要检查响应 2,3 中的响应率(
  • @JJJJJJJ 检查我更新的答案。这是你想要的吗?
  • 谢谢罗纳克。我不确定为什么您的编码列出了一位参与者的所有回复。我只想看到“rladb7”(谁会是不符合标准的人,这是他/她在第 2 块、3 块中超过 10% 的响应是
  • @JJJJJJJ 你可以加distinct。查看更新的答案。
猜你喜欢
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
相关资源
最近更新 更多