我有一些数据可以看到一群人和他们随着时间的推移吃的水果 . 我想用dplyr来看每个人,直到他们吃香蕉并总结他们吃的所有水果,直到他们吃了他们的第一个香蕉 .
数据:
data <- structure(list(user = c(1234L, 1234L, 1234L, 1234L, 1234L, 1234L,
1234L, 1234L, 1234L, 1234L, 1234L, 1234L, 9584L, 9584L, 9584L,
9584L, 9584L, 9584L, 9584L, 9584L, 9584L, 4758L, 4758L, 4758L,
4758L, 4758L, 4758L), site = structure(c(1L, 6L, 1L, 1L, 6L,
5L, 5L, 3L, 4L, 1L, 2L, 6L, 1L, 6L, 5L, 5L, 3L, 2L, 6L, 6L, 6L,
4L, 2L, 5L, 5L, 4L, 2L), .Label = c("apple", "banana", "lemon",
"lime", "orange", "pear"), class = "factor"), time = c(1L, 2L,
3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L,
6L, 7L, 8L, 9L, 5L, 6L, 7L, 8L, 9L, 10L), int = structure(c(2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L), .Label = c("banana",
"other"), class = "factor")), .Names = c("user", "site", "time",
"int"), row.names = c(NA, -27L), class = "data.frame")
我最初的想法是将数据分组以找到每个用户吃香蕉的第一个实例:
data <- data %>% transform(var = ifelse(site=="banana", 'banana','other'))
data_ban <- data %>%
filter(var=='banana') %>%
group_by(user, var, time) %>%
group_by(user) %>%
summarise(first_banana = min(time))
但现在我仍然坚持如何将其实际应用于原始的“数据”数据框,并设置一个过滤器,其中说明:对于每个用户,只包括直到“data_ban”中给出的时间的数据 . 有任何想法吗?
2 回答
这样的事情:按
user
分组并过滤time
低于他们第一次吃香蕉 .否则也许是
anti_join
.你可以试试
slice