我有一个数据框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
最佳方法是什么?
答案 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的评论,以获得更精简的管道。