选择R中的连续答案

时间:2014-12-05 14:17:10

标签: r data.table

我的数据集如下(这只是下面的示例):

dataframe<-data.frame("id" = c(1,2,5,7,9,21,22,23),"questionfk"=c(145,51,51,145,145,51,145,51))

在此数据中,id表示问题的顺序。 Questionfk,是问题ID。

我想在questionfk 145和51上过滤这些数据,其中145是在51之后第二个问题之前被问到的。所以我最终想要的是以下内容:

dataframefiltered<-data.frame("id" = c(1,2,22,23),"questionfk"=c(145,51,145,51))

我用很多if来做这件事,并且可以用data.table来做这件事吗?如何?

谢谢!

2 个答案:

答案 0 :(得分:1)

可能有帮助

library(data.table)
setDT(dataframe)[dataframe[, {indx=which(c(TRUE, questionfk[-1]==145 &
         questionfk[-.N]==51) & c(TRUE, diff(id)==1))
          sort(c(indx, indx+1))}]]
#    id questionfk
#1:  1        145
#2:  2         51
#3: 22        145
#4: 23         51

答案 1 :(得分:0)

我不确定我是否理解你正在寻找的确切条件,但我的基础是想要选择问题145和51,但只有当它按顺序连续出现时才会这样。我意识到这并没有给出与你展示的相同的结果,但可能你可以修改它以匹配正确的条件。

而不是data.table,这里有一种方法可以使用dplyr(大数据集也很快,非常优雅):

dataframe %>% 
  mutate(last_question = lag(questionfk),
         next_question = lead(questionfk),
         after_145 = last_question==145,
         before_51 = next_question==51) %>%
  filter(after_145 | before_51) %>%
  select(id, questionfk)