根据前一行中的值删除一行

时间:2016-08-30 08:16:32

标签: r dataframe

我有一个数据框df:

Event       Code
Picture     hit
Picture     incorrect
Picture     hit
Picture     hit
Picture     incorrect
Picture     hit
Picture     inocrrect
Picture     hit
Picture     miss
Picture     hit

我想在不正确之后删除所有值,所以它看起来像这样:

Event       Code
Picture     hit
Picture     incorrect
Picture     hit
Picture     incorrect
Picture     inocrrect
Picture     miss
Picture     hit

最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

这取决于您使用的语言。例如,在使用索引的R或MATLAB中,这将非常容易。您将利用索引的效率(在R中):

Index <- which(DF[,2]=="incorrect")
DF <- DF[-(Index+1),]

当然,你可以说明最后你可能有一个“不正确”的事实,所以Index + 1没有意义。这可以通过在找到索引后添加以下代码来完成:

If(Index[ length(Index) ] == nrow(DF) ) {Index<-Index[-length(Index)]}

这行代码只是检查在数据帧的末尾是否发现“不正确”,如上所述。如果是,那么我们不会删除此后的术语,因为它不存在。这是通过从我们的矢量'Index'

中排除这个指数来实现的

答案 1 :(得分:0)

您还可以使用dplyr管道:

df %>%
  mutate(var=ifelse(lag(Code)=="incorrect",1,0)) %>%
  mutate(var = replace(var, is.na(var), 0))%>%
  filter(var!=1) %>%
  select(-var)

 Event      Code
1 Picture       hit
2 Picture incorrect
3 Picture       hit
4 Picture incorrect
5 Picture incorrect
6 Picture      miss
7 Picture       hit

修改: 请查看下面的Procrastinatus Maximus的评论,以获得更精简的管道。