R获取具有相同但较少其他列值的唯一列值的计数

时间:2019-12-08 19:34:17

标签: r dataframe

我在R中有一个数据框,带有来自测试的学生ID和问题ID。学生按顺序回答问题,但不必回答每个问题。对于每个学生和问题,我想得到的是一个计数,以多少个独特的学生作为该学生回答了较早的问题(questID <当前questID)。这是带有一些预期计数的数据框示例。例如,任务ID 3上的studentID 1已经回答了2个先前的问题(1和2),另外还有两个独特的学生(studentID 2和3)回答了这些问题。有什么想法可以让我在R中获得这些计数吗?
enter image description here

数据

DF <- data.frame(studentID = c(rep(1, 4), rep(2,3), rep(3, 2)),
                 questID = c(1, 2, 3, 4, 1 , 2, 4, 2, 5))

1 个答案:

答案 0 :(得分:1)

一种粗略的方法是创建一个函数,该函数为studentID的值计算questID的不同数量。

library(dplyr)

get_counts <- function(x) {
    DF %>%
     group_by(studentID) %>%
     filter(any(questID %in% x)) %>%
     pull(studentID) %>% n_distinct - 1
}

现在,我们可以group_by studentID并将questID传递给get_counts函数,以递增方式获得count。我们将每个组中的第一个count的{​​{1}}更改为0,因为它没有要检查的先前的questID

questID