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