У меня есть большое значение df, подобное приведенному ниже, где я хочу знать (используя термины из составленного df), чтобы узнать, какие идентификаторы имеют одинаковые плоды в течение самого длительного периода времени в этом событии, проводимом два раза в год.Т.е. возможность держать фрукт появляется только раз в два года.
df<-data.frame("id"=c(1, 1, 1, 2, 2, 2, 2, 3, 3, 3),
"Year"=c(1981, 1981, 1985, 2011, 2011, 2013, 2015, 1921, 1923, 1955),
"fruit"=c("banana", "apple", "banana", "orange", "melon", "orange",
"orange", "melon", "melon", "melon"))
Я пробовал разные виды group_by
и cumsum
, см. Ниже.
df<-df %>% mutate(year_diff=cumsum(c(1, diff(df$Year)>1)))
df %>% group_by(id, fruit) %>% filter(year_diff==2)
И тот, что ниже (после перезагрузки df)
df %>% group_by(id, fruit) %>% mutate(year_diff=cumsum(c(1, diff(df$Year)>1)))
И поиграл с:
df %>% group_by(id, fruit) %>% mutate(summarise(n_years=n_distinct(Year)))
В конце я идеально хочу выпитькак на приведенном ниже, расположении идентификаторов (с их фруктами) по порядку тех, кто наиболее последовательно «держит» фрукт в событиях (со временем).Помните, что мероприятие проводится только раз в два года.
id fruit occurence
2 orange 3
3 melon 2
1 banana 1
1 apple 1
2 melon 1
3 melon 1
Я понимаю, что есть несколько шагов.
РЕДАКТИРОВАТЬ: Может быть, есть способ изменить это:
df %>% group_by(id, fruit) %>% summarise(n_years=n_distinct(Year)) %>% arrange(desc(n_years)) %>% ungroup()
, чтобы он создавал новый столбец в исходной таблице (что я не могу сделать, но вы могли бы быть), а затем я могу отфильтровать последовательные события?