gpt4 book ai didi

r - 通过学生尝试总结重复的项目

转载 作者:行者123 更新时间:2023-12-05 01:23:26 25 4
gpt4 key购买 nike

预期输出的问题和解释

我有关于每个学生在考试中尝试了多少次以及他们回答了哪些项目的原始数据 (input)。对于这个例子,我有一个包含 5 个项目的池,但学生只对其中的 3 个项目做出回应。他们可以多次参加考试。因此,我想以一种可以看到以下所有信息的方式总结原始数据:

  • 试用号(例如,第一次试用、第二次试用、第三次试用...)。 试用专栏
  • 有多少正确的项目(例如,正确的项目总数)总共有多少项目他们已经回应(在这种情况下,它应该是 3每个人),
  • 正确率。 百分比
  • 主要问题:他们以前见过多少元素? repeated 列(例如,如果他们在第一次试验中响应了项目 1,并且在第二次试验中也响应了项目 1,那么我想知道此信息)
    • 如果有重复项,我想看看哪些重复了元素在那里。 repeated_items

输入

作为输入,我有原始数据,学生nametrial的编号(例如,1、2、3 ...),以及池 i1:i5 中的所有项目。项目 (0, 1) 的值显示学生是对还是错(1 = 正确,0 = 错误)。缺失值表明学生在那次尝试中没有拿走那个项目。

library(dplyr)

df <- tibble(name = c("John", "John", "Mary", "Mary"),
trial = c(1, 2, 1, 2),
i1 = c(1, 0, 0, NA),
i2 = c(NA, NA, 1, 1),
i3 = c(NA, 1, NA, 1),
i4 = c(0, 1, 1, NA),
i5 = c(0, NA, NA, 1))

# # A tibble: 4 × 7
# name trial i1 i2 i3 i4 i5
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 John 1 1 NA NA 0 0
# 2 John 2 0 NA 1 1 NA
# 3 Mary 1 0 1 NA 1 NA
# 4 Mary 2 NA 1 1 NA 1

预期输出

作为输出,我希望看到一个像下面这样的汇总表,显示我在上面的描述中提出的所有要点。我手动创建了这个表,现在我试图用函数来组织它,这样我就可以加快这个过程。我的主要问题是生成列 repeatedrepeated_items。每个学生的第一次试验对于 repeated_items 总是有 NA,对于 repeated 总是有零,因为这是第一次试验,所以他们从未见过之前的那些项目。

  • repeated 列计算参与者在之前尝试中已经看到的项目数。因此,例如,在约翰的第一次尝试中,他回应了项目 i1、i4 和 i5。在他的第二次尝试中,他对项目 i1、i3 和 i4 做出了回应。因此,在他的第二次尝试中,他回应了之前看到的两个项目(i1 和 i4)。所以我想使用 repeated 列来计算上次尝试重复了多少项。

  • repeated_item 列跟踪在此新试验中“重复”了哪些特定项目。因此,在 John 的案例中,在第二次试验中,项目 i1 和 i4 被重复了。并且在 Mary 的第二次试验中,与她的第一次试验相比,只有第 i2 项被重复了。

     # # A tibble: 4 × 7
    # name trial correct n_items percent repeated repeated_items
    # <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
    # 1 John 1 1 3 0.333 0 NA
    # 2 John 2 2 3 0.667 2 i1, i4
    # 3 Mary 1 2 3 0.667 0 NA
    # 4 Mary 2 3 3 1 1 i2

最佳答案

我们可以使用

library(dplyr)
library(stringr)
library(tidyr)
df %>%
pivot_longer(cols = starts_with("i"),
names_to = "i",values_drop_na = TRUE) %>%
add_count(name, i, name = "n1") %>%
mutate(i =replace(i, n1 <2, NA_character_)) %>%
group_by(name, trial) %>%
summarise(correct = sum(value), n_items = n(),
percent = mean(value), repeated= n_distinct(i, na.rm = TRUE),
repeated_items = str_c(i[!is.na(i)], collapse = ", "),
.groups = 'drop_last') %>%
mutate(across(starts_with('repeated'), ~ replace(.x, 1, NA)))

-输出

# A tibble: 4 × 7
# Groups: name [2]
name trial correct n_items percent repeated repeated_items
<chr> <dbl> <dbl> <int> <dbl> <int> <chr>
1 John 1 1 3 0.333 NA <NA>
2 John 2 2 3 0.667 2 i1, i4
3 Mary 1 2 3 0.667 NA <NA>
4 Mary 2 3 3 1 1 i2

关于r - 通过学生尝试总结重复的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72322815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com