У меня есть некоторые данные, которые смотрят на группу людей и фрукты, которые они едят с течением времени. Я хочу использовать dplyr, чтобы посмотреть на каждого отдельного человека, пока они не едят банан и не суммируют все фрукты, которые они съедали , пока они не едят свой первый банан.r + 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» dataframe и установите фильтр, который говорит: для каждого пользователя включать данные только до времени, указанного в «data_ban». Есть идеи?
Вы можете также разместить ожидаемый результат. Может быть 'data%>% group_by (user)%>% slice (1: (который (int == 'banana') [1L]))' – akrun
@akrun, то, что вы опубликовали, дает ожидаемый результат. В чем разница между [1L] и [1], которую написал Ромайн ниже? –
Это просто получить целочисленный индекс вместо числового индекса. 1L принуждение к целому числу (предположительно быстрее) – akrun