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