R获取具有相同但较少其他列值的唯一列值的计数
我在R中有一个数据框,其中包含测试中的学生ID和问题ID。学生按顺序回答问题,但不必回答每个问题。对于每一个学生和问题,我试图得到的是有多少独特的学生作为这个学生回答了前面的问题(questID<当前questID)。下面是一个具有一些预期计数的数据帧示例。例如,问题3中的学生1回答了之前的两个问题(1和2),另外两个独特的学生(学生2和3)回答了这些问题。你知道我如何在R中获得这些计数吗?R获取具有相同但较少其他列值的唯一列值的计数,r,dataframe,R,Dataframe,我在R中有一个数据框,其中包含测试中的学生ID和问题ID。学生按顺序回答问题,但不必回答每个问题。对于每一个学生和问题,我试图得到的是有多少独特的学生作为这个学生回答了前面的问题(questID
数据
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))
DF一个粗略的方法是创建一个函数,该函数计算questID
值的studentID
的不同数量
library(dplyr)
get_counts <- function(x) {
DF %>%
group_by(studentID) %>%
filter(any(questID %in% x)) %>%
pull(studentID) %>% n_distinct - 1
}
请使用dput()
提供您的数据。我不清楚您到底在找什么。也许一个期望结果的示例会有所帮助。实际上,count列是我正在寻找的-我只是将count作为输出的示例显示…Thanks我仍然不清楚显示的预期输出。对于ID为1的学生和ID为3的问题,ID为1的学生之前回答了两个问题(到这里为止还可以),但ID为3的学生从未回答过问题1。对于ID为3的学生,问题5中的最后一个条目呢。当没有人回答问题5时,情况如何。不清楚如何计算count
。谢谢..好的..如果你看看回答问题5的学生3,但在他们回答问题5之前,他们回答了问题2。现在另外两名学生(学生ID为1和2)也回答了问题2。所以,关键不在于有多少学生回答了当前的问题(5个),而在于学生回答了之前的问题。我希望这是有道理的。让我试一试
DF %>%
group_by(studentID) %>%
mutate(count = purrr::map_dbl(row_number(), ~get_counts(questID[1:(.x - 1)])),
count = replace(count, 1, 0))
# studentID questID count
# <dbl> <dbl> <dbl>
#1 1 1 0
#2 1 2 1
#3 1 3 2
#4 1 4 2
#5 2 1 0
#6 2 2 1
#7 2 4 2
#8 3 2 0
#9 3 5 2