【问题标题】:how to use proportion information within a column to select specific rows (participants) in R如何使用列中的比例信息来选择 R 中的特定行(参与者)
【发布时间】:2020-07-27 15:43:22
【问题描述】:

我需要帮助才能在我的数据集上选择一部分参与者。 每个参与者我有不同数量的观察(行)。我只想与那些获得少于 5% 的 Conventional_response_code = F 的参与者以及那些拥有最大比例的 Conventional_response_code = S 的参与者合作。

participant Test_word    Regular_response    Conventional_response_code   PPT
   <chr>       <chr>        <chr>               <chr>                      <dbl>
 1 BM0289      ambulance    NA                  N                             92
 2 BM0289      bat          NR                  NR                            92
 3 BM0289      beard        man with a mustache D                             92
 4 BM0289      binoculars   NA                  N                             92
 5 BM0289      bride        wedding dress       PP                            92
 6 BM0289      cannon       gun                 M                             92
 7 BM0289      cheerleaders NA                  N                             92
 8 BM0289      chimney      NA                  N                             92
 9 BM0289      dinosaur     NR                  NR                            92
10 BM0289      dragon       NR                  NR                            92

我设法创建了一个比例表,我可以在其中看到这些信息:

###Number of errors per participant (raw numbers)
proptable<-xtabs(formula= ~ participant + Conventional_response_code, data=data)

###proportion of errors per participant (row)
proptable<- (round(100*prop.table(proptable, margin=1), digits=2))
head(proptable)

                    Conventional_response_code
participant Adm E    AN     B     D     F     M M-F-F M-F-U   M-N M-N-A M-N-N    MO     N    NR     O    PP  PP-F  PP-N Prima     S   S-F S-F-F
     BM0289  0.00  0.00  0.00  0.99  2.97 18.81  0.99  0.00  0.00  0.00  0.99  2.97 23.76 29.70  0.00  6.93  0.00  0.00  0.00  8.91  0.00  0.00
     BM0601  0.95  5.71  0.00  9.52 20.00  4.76  0.00  0.00  0.00  0.00  0.00  2.86 20.95  3.81  7.62  1.90  0.00  0.00  3.81 18.10  0.00  0.00
     LD0001  0.00  0.00  0.00  0.00  0.00  7.69  0.00  0.00  0.00  0.00  0.00  0.00 61.54  7.69  0.00 15.38  0.00  0.00  0.00  7.69  0.00  0.00
     LD0002  0.00  0.00  0.00 27.50  0.00 12.50  0.00  0.00  0.00  0.00  0.00  2.50  2.50 20.00  5.00  7.50  0.00  0.00  0.00 17.50  0.00  0.00
     LD0003  2.27  0.00  4.55 13.64 27.27  2.27  0.00  0.00  0.00  0.00  0.00  2.27 29.55  2.27  0.00  2.27  0.00  0.00  0.00 13.64  0.00  0.00
     LD0004  4.67  0.00  0.00 11.21  4.67 12.15  0.00  0.00  0.00  0.93  0.93  0.93 20.56 14.95  0.93  4.67  0.00  0.00  0.93 19.63  0.00  0.00
           Conventional_response_code
participant S-F-U   S-N S-N-A S-N-N     U
     BM0289  0.00  0.00  1.98  0.99  0.00
     BM0601  0.00  0.00  0.00  0.00  0.00
     LD0001  0.00  0.00  0.00  0.00  0.00
     LD0002  0.00  0.00  5.00  0.00  0.00
     LD0003  0.00  0.00  0.00  0.00  0.00
     LD0004  0.00  0.00  0.93  1.87  0.00
> 

但这会创建一个单独的表。我如何在我自己的数据集(数据)中使用这个比例的信息,并选择那些满足我需要的条件的参与者:

  • Conventional_response_code 列中 F 值的数量应低于 5%
  • Conventional_response_code 列中 S 值的比例应该是最高的

谢谢!!

【问题讨论】:

  • 您可以过滤您的proptable 以获取参与者ID,然后过滤原始数据。例如。 participants &lt;- proptable %&gt;% filter(F &lt; 5) %&gt;% pull(participant)data %&gt;% filter(participant %in% participants)。我无法测试我的解决方案,因为您没有提供reproducible example。我不确定您所说的“S 值应该是最高的”是什么意思。

标签: r select filter group-by dplyr


【解决方案1】:

即使您已经找到了一种方法来组合您的 proptable 数据框,我想从最初的 participant 表开始解决方案会更容易,因为您想比较 Conventional_response_code 的频率。

library(dplyr)

participants.filtered <- participant %>%
  count(participant, Conventional_response_code) %>%
  group_by(participant) %>%
  mutate(freq = n/sum(n)) %>%
  filter(any(Conventional_response_code == 'F' & freq < 0.05)) %>%
  arrange(desc(freq)) %>%
  filter(Conventional_response_code == 'S', row_number() == 1) %>%
  pull(participant) %>%
  unique()

这有帮助吗?

【讨论】:

    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 2022-08-02
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多