我有一个多个人行为事件的数据集。它看起来像:
ID Behavior Order
A Bucket 1
A Tube 2
A Bucket 3
A Tube 4
A Push 5
B Bucket 1
B Tube 2
B Bucket 3
B Tube 4
C Bucket 1
C Tube 2
C Push 3
C Bucket 4
C Tube 5
我正在尝试删除个人的最后一个条目,其中最后一个条目是“推送”行为。
我首先使用以下代码找到了哪些人的最后行为是“推”:
LastBehaviour <- aggregate(Events[,"Behavior"], list(Events$Observation.id), tail, 1)
FixPush<-LastBehaviour[which(LastBehaviour$Behavior=="Push" ),"Group.1"]
我遇到的问题是如何根据“FixPush”中的列表删除最后一行的个人。
df <- df %>%
group_by(Observation.id%in%FixPush)%>%
arrange(Order)%>%
head(-1) %>%
glimpse()
现在这段代码只删除了一行。我假设是整个数据集的最后一行。我如何删除行为为“推”的每个个体的最后一个条目?
2条答案
按热度按时间wnrlj8wa1#
在dplyr中,使用分组过滤器删除
Behavior
等于"Push"
且等于row_number() == n()
的行(这意味着它是组中的最后一行)。3ks5zfa02#
使用
data.table
的另一个选项其中
.SD
是每组ID
的数据子集。然后删除Behavior =="Push" AND Order ==. N的任何行。其中. N表示每组的总行数。