r+;dplyr过滤掉时间序列

r+;dplyr过滤掉时间序列,r,dplyr,R,Dplyr,我有一些数据是关于一群人以及他们随时间吃的水果的。我想用dplyr来观察每个人,直到他们吃了一根香蕉,并总结他们吃的所有水果,直到他们吃了第一根香蕉 数据: 数据% 分组依据(用户、变量、时间)%>% 分组依据(用户)%>% 总结(第一次=分钟(时间)) 但现在我一直在研究如何将其应用于原始的“数据”数据帧,并设置一个过滤器,该过滤器表示:对于每个用户,只包括“数据禁令”中给出的时间之前的数据。有什么想法吗 类似这样:按user分组,过滤time低于他们第一次吃香蕉的次数 > data

我有一些数据是关于一群人以及他们随时间吃的水果的。我想用dplyr来观察每个人,直到他们吃了一根香蕉,并总结他们吃的所有水果,直到他们吃了第一根香蕉

数据:

数据%
分组依据(用户、变量、时间)%>%
分组依据(用户)%>%
总结(第一次=分钟(时间))

但现在我一直在研究如何将其应用于原始的“数据”数据帧,并设置一个过滤器,该过滤器表示:对于每个用户,只包括“数据禁令”中给出的时间之前的数据。有什么想法吗

类似这样:按
user
分组,过滤
time
低于他们第一次吃香蕉的次数

> data %>% group_by(user) %>% filter( time <= which(site=="banana")[1] )
Source: local data frame [17 x 4]
Groups: user

   user   site time    int
1  1234  apple    1  other
2  1234   pear    2  other
3  1234  apple    3  other
4  1234  apple    4  other
5  1234   pear    5  other
6  1234 orange    6  other
7  1234 orange    7  other
8  1234  lemon    8  other
9  1234   lime    9  other
10 1234  apple   10  other
11 1234 banana   11 banana
12 9584  apple    1  other
13 9584   pear    2  other
14 9584 orange    3  other
15 9584 orange    4  other
16 9584  lemon    5  other
17 9584 banana    6 banana

>data%>%group\u by(user)%>%filter(时间您可以尝试
slice

data %>%
     group_by(user) %>% 
     slice(1:(which(int=='banana')[1L]))

你也可以发布预期的输出。可能是
data%%>%group\u by(user)%%>%slice(1:(which(int='banana')[1L])
@akrun,你发布的内容给出了预期的输出。Romain在下面发布的[1]和[1]之间有什么区别?只是得到一个整数索引而不是数字索引。1L强制为整数(据说更快)如果您只需要time
data%%>%group\u by(user)%%>%slice(which.max(time[seq(which(int='banana')[1L]))
(假设
time
没有排序。否则,只需
哪个(int='banana')[1L]
将获得最后一行我喜欢这个解决方案!我唯一的问题是:向量调用什么([1])我发现有了它,我就失去了用户4758,但删除它会产生相同的结果,只需用户添加一个……捕捉用户第一次吃香蕉的时间
> data %>% group_by(user) %>% filter( time <= which(site=="banana")[1] )
Source: local data frame [17 x 4]
Groups: user

   user   site time    int
1  1234  apple    1  other
2  1234   pear    2  other
3  1234  apple    3  other
4  1234  apple    4  other
5  1234   pear    5  other
6  1234 orange    6  other
7  1234 orange    7  other
8  1234  lemon    8  other
9  1234   lime    9  other
10 1234  apple   10  other
11 1234 banana   11 banana
12 9584  apple    1  other
13 9584   pear    2  other
14 9584 orange    3  other
15 9584 orange    4  other
16 9584  lemon    5  other
17 9584 banana    6 banana
data %>%
     group_by(user) %>% 
     slice(1:(which(int=='banana')[1L]))