Как вы вычисляете величины (проценты), которые больше и меньше определенного числа в другом столбце?

У меня есть этот набор данных

study_ID title                  experiment question_ID participant_ID estimate_level estimate correct_answer question                      type   category   age gender
      <dbl> <chr>                       <dbl> <chr>                <int> <chr>             <dbl>          <dbl> <chr>                         <chr>  <chr>    <int> <chr> 
 1       11 Dallacker_Parents'_co…          1 1                        1 individual          3             10   How many sugar cubes does or… unlim… nutriti…    32 Female
 2       11 Dallacker_Parents'_co…          1 2                        1 individual         10             11.5 How many sugar cubes does a … unlim… nutriti…    32 Female
 3       11 Dallacker_Parents'_co…          1 3                        1 individual          7              6.5 How many sugar cubes does a … unlim… nutriti…    32 Female
 4       11 Dallacker_Parents'_co…          1 4                        1 individual          1             16.5 How many sugar cubes does a … unlim… nutriti…    32 Female
 5       11 Dallacker_Parents'_co…          1 5                        1 individual          7             11   How many sugar cubes does a … unlim… nutriti…    32 Female
 6       11 Dallacker_Parents'_co…          1 6                        1 individual          5              2.5 How many sugar cubes does a … unlim… nutriti…    32 Female
 7       11 Dallacker_Parents'_co…          1 1                        2 individual          2             10   How many sugar cubes does or… unlim… nutriti…    29 Female
 8       11 Dallacker_Parents'_co…          1 2                        2 individual         10             11.5 How many sugar cubes does a … unlim… nutriti…    29 Female
 9       11 Dallacker_Parents'_co…          1 3                        2 individual          1.5            6.5 How many sugar cubes does a … unlim… nutriti…    29 Female
10       11 Dallacker_Parents'_co…          1 4                        2 individual          2             16.5 How many sugar cubes does a … unlim… nutriti…    29 Female

В этом наборе данных 6 вопросов, каждый из которых имеет столбец correct_answer и столбец estimate. Я пытаюсь вычислить величину для каждого вопроса, чтобы получить процент людей, которые недооценили или переоценили и которые оценили правильно.

Например, для каждого из 6 вопросов он вернет что-то вроде этого: 80 процентов занижены, 10 завышены и 10 процентов ответили правильно.

Как я могу это сделать? Я в тупике. Заранее спасибо!

Вот вывод

dput(head(DF, 10))
structure(list(study_ID = c(5, 5, 5, 5, 5, 5, 5, 5, 5, 5), title = c("5_Jayles_Debiasing_The_Crowd", 
"5_Jayles_Debiasing_The_Crowd", "5_Jayles_Debiasing_The_Crowd", 
"5_Jayles_Debiasing_The_Crowd", "5_Jayles_Debiasing_The_Crowd", 
"5_Jayles_Debiasing_The_Crowd", "5_Jayles_Debiasing_The_Crowd", 
"5_Jayles_Debiasing_The_Crowd", "5_Jayles_Debiasing_The_Crowd", 
"5_Jayles_Debiasing_The_Crowd"), experiment = c(1, 1, 1, 1, 1, 
1, 1, 1, 1, 1), question_ID = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), 
    participant_ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), estimate_level = c("individual", 
    "individual", "individual", "individual", "individual", "individual", 
    "individual", "individual", "individual", "individual"), 
    estimate = c(2e+07, 4500000, 21075541, 2e+07, 1e+06, 1.1e+07, 
    2.5e+07, 8e+06, 1.6e+07, 9800000), correct = c(3.8e+07, 3.8e+07, 
    3.8e+07, 3.8e+07, 3.8e+07, 3.8e+07, 3.8e+07, 3.8e+07, 3.8e+07, 
    3.8e+07), question = c("What is the population of Tokyo and its agglomeration?", 
    "What is the population of Tokyo and its agglomeration?", 
    "What is the population of Tokyo and its agglomeration?", 
    "What is the population of Tokyo and its agglomeration?", 
    "What is the population of Tokyo and its agglomeration?", 
    "What is the population of Tokyo and its agglomeration?", 
    "What is the population of Tokyo and its agglomeration?", 
    "What is the population of Tokyo and its agglomeration?", 
    "What is the population of Tokyo and its agglomeration?", 
    "What is the population of Tokyo and its agglomeration?"), 
    type = c("unlimited", "unlimited", "unlimited", "unlimited", 
    "unlimited", "unlimited", "unlimited", "unlimited", "unlimited", 
    "unlimited"), category = c("demographics", "demographics", 
    "demographics", "demographics", "demographics", "demographics", 
    "demographics", "demographics", "demographics", "demographics"
    ), age = c("NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 
    "NA", "NA"), gender = c("NA", "NA", "NA", "NA", "NA", "NA", 
    "NA", "NA", "NA", "NA")), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))

person dampfy    schedule 01.10.2020    source источник
comment
пожалуйста, предоставьте вывод, но я думаю, что некоторые группы должны легко решить этот вопрос   -  person Bruno    schedule 01.10.2020
comment
Фрейм данных содержит 1800 строк, поэтому я не могу скопировать и вставить весь вывод. Если только я не делаю что-то не так. Я не очень осведомлен, извините!   -  person dampfy    schedule 01.10.2020
comment
Пожалуйста, сделайте dput(head(df, 10)). @dampfy   -  person ekoam    schedule 01.10.2020
comment
@ekoam Я только что добавил это, надеюсь, это то, что вам нужно!   -  person dampfy    schedule 01.10.2020
comment
@Бруно см. выше   -  person dampfy    schedule 01.10.2020


Ответы (1)


Вот dplyr подход:

library(dplyr)
df %>%
  group_by(question_ID) %>%
  summarize(prop_over = mean(estimate > correct),
            prop_under = mean(estimate < correct),
            prop_correct = mean(estimate == correct)
  )
# `summarise()` ungrouping output (override with `.groups` argument)
# # A tibble: 1 x 4
#   question_ID prop_over prop_under prop_correct
#         <dbl>     <dbl>      <dbl>        <dbl>
# 1           1         0          1            0
person Gregor Thomas    schedule 01.10.2020
comment
Спасибо за ответ! Будет ли это поиск символов ›, ‹ и == в столбце correct_answer? Похоже, это будет делать это для среднего значения оценки каждого вопроса. - person dampfy; 01.10.2020
comment
Это сравнение столбца с именем estimate столбца со столбцом с именем correct. В данных, которыми вы поделились, нет столбца с именем correct_answer, поэтому я не могу вам много рассказать об этом, но я уверен, что вы можете использовать этот шаблон для сравнения любых столбцов, которые вам нужны. - person Gregor Thomas; 01.10.2020
comment
mean для расчета пропорции. estimate > correct равно TRUE, когда оценка больше правильной, и FALSE в противном случае. Когда вы выполняете математические операции со значениями true/false, TRUE равно 1, а FALSE равно 0. Таким образом, сумма столбца "истина/ложь" представляет собой количество TRUE значений, а среднее значение столбца "истина/ложь" представляет собой долю TRUE значений. Вы можете, конечно, умножить на 100, если хотите превратить пропорцию в процент. Во многих языках программирования sum — это стандартный способ подсчета, а mean — стандартный способ вычисления пропорций, если входные данные двоичные. - person Gregor Thomas; 01.10.2020
comment
Спасибо! Это сработало. Извините, я думал, что упомянул это раньше. - person dampfy; 06.10.2020