I have a dataset containing Site
, Year
and Total
structure(list(Site = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L,
4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L), .Label = c("B1",
"B10", "B100", "B101", "B102", "B103", "B104", "B105", "B106",
"B107", "B108", "B109", "B11", "B110", "B111", "B112", "B113",
"B114", "B115", "B116", "B117", "B118", "B119", "B12", "B120",
"B121", "B122", "B123", "B124", "B125", "B126", "B127", "B128",
"B129", "B13", "B130", "B131", "B132", "B133", "B134", "B135",
"B136", "B137", "B138", "B139", "B14", "B140", "B141", "B142",
"B142A", "B143", "B144", "B145", "B146", "B147", "B148", "B149",
"B15", "B150", "B151", "B152", "B153", "B154", "B155", "B156",
"B157", "B158", "B159", "B16", "B160", "B161", "B162", "B163",
"B164", "B165", "B166", "B168", "B169", "B17", "B170", "B170A",
"B171", "B172", "B173", "B174", "B175", "B176", "B177", "B178",
"B179", "B18", "B180", "B181", "B182", "B183", "B184", "B185",
"B186", "B187", "B188", "B189", "B19", "B190", "B191", "B192",
"B193", "B194", "B194A", "B195", "B196", "B197", "B198", "B199",
"B2", "B20", "B200", "B201", "B203", "B204", "B205", "B206",
"B207", "B208", "B21", "B211", "B212", "B213", "B214", "B215",
"B216", "B217", "B218", "B219", "B22", "B220", "B221", "B222",
"B223", "B224", "B225", "B226", "B227", "B228", "B229", "B23",
"B24", "B25", "B26", "B27", "B28", "B29", "B3", "B30", "B307",
"B31", "B32", "B33", "B34", "B35", "B36", "B37", "B38", "B39",
"B4", "B40", "B42", "B43", "B44", "B45", "B46", "B47", "B48",
"B49", "B5", "B51", "B52", "B53", "B54", "B55", "B56", "B57",
"B58", "B59", "B6", "B60", "B62", "B62A", "B63", "B64", "B65",
"B66", "B67", "B68", "B69", "B7", "B70", "B71", "B72", "B74",
"B75", "B76", "B77", "B78", "B79", "B79A", "B8", "B80", "B80A",
"B81", "B84", "B85", "B86", "B87", "B88", "B89", "B9", "B90",
"B91", "B92", "B93", "B94", "B95", "B96", "B97", "B98", "B99",
"B99A", "C0", "C1", "C10", "C101", "C102", "C103", "C104", "C105",
"C106", "C107", "C108", "C109", "C11", "C110", "C111", "C112",
"C113", "C114", "C115", "C116", "C117", "C118", "C119", "C12",
"C120", "C121", "C122", "C123", "C124", "C125", "C126", "C127",
"C128", "C129", "C13", "C130", "C131", "C132", "C133", "C134",
"C135", "C136", "C137", "C138", "C139", "C14", "C140", "C141",
"C142", "C143", "C144", "C145", "C146", "C147", "C148", "C149",
"C15", "C150", "C151", "C152", "C153", "C154", "C155", "C156",
"C157", "C158", "C159", "C16", "C160", "C160A", "C160B", "C161",
"C162", "C163", "C17", "C18", "C19", "C2", "C20", "C21", "C22",
"C23", "C24", "C24A", "C24B", "C24C", "C25", "C26", "C27", "C28",
"C29", "C3", "C30", "C31", "C32", "C33", "C34", "C34A", "C35",
"C36", "C37", "C38", "C39", "C3A", "C3B", "C4", "C40", "C41",
"C42", "C43", "C44", "C45", "C46", "C47", "C48", "C49", "C5",
"C50", "C51", "C52", "C53", "C54", "C55", "C56", "C57", "C58",
"C59", "C6", "C60", "C61", "C61A", "C62", "C63", "C7", "C8",
"C9", "C9A", "CP0", "CP000", "CP1", "CP10", "CP100", "CP101",
"CP102", "CP103", "CP104", "CP105", "CP107", "CP108", "CP109",
"CP11", "CP110", "CP111", "CP112", "CP113", "CP114", "CP115",
"CP116", "CP117", "CP118", "CP119", "CP12", "CP120", "CP121",
"CP122", "CP123", "CP124", "CP125", "CP126", "CP127", "CP128",
"CP129", "CP13", "CP130", "CP131", "CP132", "CP133", "CP134",
"CP135", "CP136", "CP137", "CP138", "CP139", "CP14", "CP140",
"CP141", "CP142", "CP143", "CP144", "CP145", "CP146", "CP147",
"CP148", "CP149", "CP14A", "CP15", "CP150", "CP151", "CP152",
"CP153", "CP154", "CP155", "CP156", "CP157", "CP158", "CP16",
"CP17", "CP18", "CP188", "CP18A", "CP19", "CP191", "CP2", "CP20",
"CP21", "CP215", "CP22", "CP23", "CP24", "CP25", "CP26", "CP27",
"CP28", "CP29", "CP3", "CP30", "CP31", "CP32", "CP33", "CP34",
"CP35", "CP36", "CP37", "CP38", "CP38A", "CP39", "CP4", "CP40",
"CP40A", "CP41", "CP42", "CP42A", "CP43", "CP5", "CP54", "CP55",
"CP5A", "CP5B", "CP6", "CP64", "CP65", "CP7", "CP72", "CP73",
"CP8", "CP80", "CP82", "CP89", "CP9", "CP95", "CP97", "CP9A",
"EX0", "EX041D", "EX059", "EX064", "EX1", "EX10", "EX100", "EX101",
"EX102", "EX103", "EX104", "EX105", "EX106", "EX107", "EX108",
"EX109", "EX10A", "EX11", "EX110", "EX111", "EX112", "EX113",
"EX114", "EX115", "EX116", "EX117", "EX118", "EX119", "EX12",
"EX120", "EX121", "EX122", "EX123", "EX124", "EX125", "EX126",
"EX127", "EX12A", "EX13", "EX13A", "EX14", "EX14A", "EX14B",
"EX15", "EX16", "EX17", "EX18", "EX18A", "EX19", "EX19A", "EX2",
"EX20", "EX21", "EX22", "EX23", "EX24", "EX25", "EX25A", "EX26",
"EX27", "EX28", "EX29", "EX29A", "EX3", "EX30", "EX31", "EX31A",
"EX32", "EX32A", "EX33", "EX34", "EX34A", "EX35", "EX35A", "EX36",
"EX37", "EX38", "EX38A", "EX39", "EX39A", "EX39B", "EX39C", "EX3A",
"EX4", "EX40", "EX41", "EX41A", "EX41B", "EX41C", "EX41D", "EX41E",
"EX42", "EX42A", "EX43", "EX43A", "EX43B", "EX43C", "EX43D",
"EX43E", "EX44", "EX45", "EX46", "EX47", "EX47A", "EX48", "EX48A",
"EX49", "EX49A", "EX49B", "EX49C", "EX5", "EX50", "EX51", "EX51A",
"EX51B", "EX51C", "EX51D", "EX52", "EX53", "EX54", "EX55", "EX56",
"EX57", "EX58", "EX59", "EX5A", "EX5B", "EX6", "EX60", "EX61",
"EX62", "EX62A", "EX62B", "EX62C", "EX62D", "EX62E", "EX62F",
"EX62G", "EX62H", "EX62I", "EX62X", "EX63", "EX64", "EX65", "EX65A",
"EX66", "EX67", "EX68", "EX69", "EX69A", "EX7", "EX70", "EX71",
"EX71A", "EX72", "EX72A", "EX73", "EX73A", "EX74", "EX75", "EX75A",
"EX76", "EX77", "EX78", "EX79", "EX7A", "EX8", "EX80", "EX80A",
"EX81A", "EX84", "EX85", "EX86", "EX87", "EX88", "EX89", "EX8A",
"EX9", "EX90", "EX91", "EX92", "HE0", "HE1", "HE2", "HE3", "HE4",
"HE5", "MP1", "MP10", "MP100", "MP11", "MP12", "MP13", "MP14",
"MP15", "MP16", "MP17", "MP18", "MP19", "MP2", "MP20", "MP21",
"MP22", "MP23", "MP24", "MP25", "MP26", "MP27", "MP28", "MP29",
"MP3", "MP30", "MP31", "MP32", "MP33", "MP34", "MP34A", "MP35",
"MP36", "MP37", "MP38", "MP39", "MP4", "MP40", "MP41", "MP42",
"MP43", "MP44", "MP45", "MP46", "MP47", "MP48", "MP49", "MP5",
"MP50", "MP51", "MP52", "MP53", "MP54", "MP55", "MP56", "MP57",
"MP58", "MP59", "MP6", "MP60", "MP61", "MP62", "MP63", "MP64",
"MP65", "MP66", "MP66A", "MP67", "MP68", "MP69", "MP7", "MP70",
"MP71", "MP72", "MP73", "MP74", "MP75", "MP76", "MP77", "MP78",
"MP79", "MP8", "MP80", "MP81", "MP82", "MP83", "MP84", "MP85",
"MP86", "MP87", "MP88", "MP89", "MP9", "MP90", "MP91", "MP92",
"MP93", "MP94", "MP95", "MP96", "MP97", "MP98", "O1", "O10",
"O100", "O101", "O102", "O103", "O104", "O105", "O106", "O107",
"O108", "O109", "O11", "O110", "O111", "O112", "O113", "O114",
"O115", "O116", "O117", "O118", "O119", "O12", "O13", "O131",
"O13A", "O14", "O15", "O16", "O17", "O18", "O19", "O2", "O20",
"O201", "O202", "O203", "O204", "O205", "O206", "O207", "O208",
"O209", "O21", "O210", "O211", "O212", "O213", "O214", "O215",
"O216", "O217", "O218", "O219", "O22", "O220", "O221", "O222",
"O223", "O224", "O225", "O226", "O227", "O228", "O229", "O23",
"O230", "O231", "O232", "O234", "O235", "O236", "O237", "O238",
"O239", "O24", "O240", "O241", "O242", "O243", "O244", "O245",
"O246", "O248", "O249", "O25", "O250", "O251", "O252", "O253",
"O254", "O255", "O256", "O257", "O258", "O259", "O26", "O260",
"O261", "O27", "O27A", "O28", "O29", "O3", "O30", "O30A", "O31",
"O31A", "O32", "O33", "O34", "O35", "O36", "O37", "O38", "O38A",
"O38B", "O39", "O4", "O40", "O41", "O42", "O43", "O44", "O45",
"O46", "O47", "O48", "O49", "O5", "O50", "O51", "O52", "O53",
"O54", "O55", "O56", "O57", "O58", "O59", "O5A", "O6", "O60",
"O61", "O62", "O63", "O64", "O65", "O66", "O67", "O68", "O69",
"O7", "O70", "O71", "O72", "O73", "O73A", "O73B", "O74", "O75",
"O75A", "O75B", "O75C", "O75D", "O76", "O77", "O78", "O78A",
"O79", "O8", "O80", "O81", "O82", "O83", "O84", "O85", "O86",
"O87", "O88", "O88A", "O89", "O9", "O90", "O92", "O93", "O94",
"O95", "O96", "O97", "O999", "P1", "P10", "P100", "P101", "P102",
"P103", "P104", "P105", "P106", "P107", "P108", "P109", "P11",
"P110", "P111", "P112", "P113", "P115", "P116", "P117", "P118",
"P119", "P12", "P120", "P121", "P122", "P123", "P124", "P125",
"P126", "P13", "P14", "P15", "P16", "P17", "P18", "P19", "P2",
"P20", "P21", "P22", "P23", "P24", "P3", "P4", "P5", "P6", "P7",
"P8", "P9", "SM1", "SM2", "SM4", "SM5", "SM6", "SW1", "SW10",
"SW101", "SW101A", "SW102", "SW103", "SW104", "SW104A", "SW104B",
"SW105", "SW106", "SW107", "SW108", "SW109", "SW109A", "SW11",
"SW110", "SW111", "SW112", "SW113", "SW114", "SW115", "SW116",
"SW117", "SW118", "SW119", "SW12", "SW120", "SW121", "SW122",
"SW123", "SW124", "SW125", "SW126", "SW127", "SW128", "SW129",
"SW12A", "SW13", "SW130", "SW131", "SW132", "SW133", "SW134",
"SW14", "SW15", "SW16", "SW17", "SW18", "SW19", "SW2", "SW20",
"SW21", "SW22", "SW23", "SW24", "SW25", "SW26", "SW27", "SW28",
"SW29", "SW3", "SW30", "SW31", "SW32", "SW33", "SW34", "SW35",
"SW36", "SW37", "SW38", "SW39", "SW4", "SW40", "SW41", "SW42",
"SW43", "SW44", "SW45", "SW46", "SW47", "SW48", "SW49", "SW49A",
"SW5", "SW50", "SW51", "SW52", "SW53", "SW54", "SW55", "SW56",
"SW57", "SW58", "SW59", "SW6", "SW60", "SW61", "SW61A", "SW62",
"SW63", "SW64", "SW65", "SW66", "SW67", "SW68", "SW69", "SW7",
"SW70", "SW71", "SW72", "SW73", "SW74", "SW75", "SW76", "SW77",
"SW78", "SW79", "SW8", "SW80", "SW80A", "SW81", "SW82", "SW83",
"SW84", "SW84A", "SW85", "SW86", "SW87", "SW88", "SW89", "SW9",
"SW90", "SW93", "SW94", "SW96", "SW98", "SW99", "W1", "W10",
"W100", "W101", "W102", "W103", "W103A", "W104", "W105", "W11",
"W12", "W13", "W14", "W15", "W16", "W16A", "W17", "W17A", "W18",
"W19", "W2", "W20", "W200", "W201", "W202", "W203", "W204", "W205",
"W206", "W207", "W208", "W209", "W20A", "W21", "W210", "W211",
"W22", "W22A", "W23", "W24", "W25", "W26", "W27", "W28", "W29",
"W3", "W30", "W31", "W32", "W33", "W34", "W35", "W36", "W37",
"W38", "W39", "W4", "W40", "W41", "W42", "W43", "W43A", "W44",
"W45", "W46", "W47", "W48", "W49", "W4A", "W4B", "W5", "W50",
"W51", "W51A", "W52", "W53", "W54", "W54N", "W55", "W56", "W57",
"W58", "W59", "W6", "W60", "W61", "W62", "W63", "W64", "W64A",
"W64B", "W65", "W66", "W67", "W68", "W69", "W7", "W70", "W71",
"W72", "W73", "W74", "W75", "W75A", "W76", "W77", "W78", "W79",
"W8", "W80", "W81", "W82", "W83", "W84", "W85", "W86", "W87",
"W88", "W89", "W9", "W90", "W91", "W92", "W93", "W94", "W95",
"W96", "W97", "W98", "W98A", "W99", "W99A", "X0", "X10", "X13",
"X14", "X17", "X2", "X204", "X209", "X221", "X23", "X24", "X25",
"X26", "X28", "X3", "X30", "X32", "X33", "X34", "X35", "X37",
"X4", "X40", "X41", "X42", "X48", "X49", "X5", "X52", "X53",
"X54", "X57", "X58", "X59", "X6", "X61", "X62", "X63", "X65",
"X66", "X67", "X68", "X7", "X70", "X71", "X73", "X74", "X78",
"X80", "X82", "X86", "X87", "X88", "X90", "X96", "XBN1", "XBN3",
"XBN6", "XBY1", "XBY13", "XBY16", "XBY18", "XBY19", "XD1", "XD10",
"XD11", "XD12", "XD13", "XD14", "XD15", "XD16", "XD18", "XD19",
"XD2", "XD20", "XD21", "XD22", "XD23", "XD24", "XD25", "XD26",
"XD3", "XD31", "XD35", "XD36", "XD37", "XD38", "XD4", "XD5",
"XD6", "XD7", "XD8", "XD9", "XDE1", "XDE12", "XDE14", "XDE15",
"XDE2", "XDE3", "XDE4", "XDE7", "XDE9", "XF1", "XF10", "XF11A",
"XF11C", "XF17", "XF1B", "XF20", "XF20B", "XF21", "XF24", "XF25A",
"XF25B", "XF25C", "XF25D", "XF26", "XF3", "XF4", "XFR10", "XFR13",
"XFR23", "XFR7", "XG2", "XG3", "XG4", "XG6", "XG9", "XH1", "XH11",
"XH2", "XH3", "XH4", "XH5", "XH6", "XH6B", "XH7A", "XH7B", "XH8",
"XH9", "XHE20", "XHE28", "XHG11", "XHG5", "XHG8", "XHG9", "XJ1",
"XJ15", "XJ17", "XJ22", "XJ28", "XJ3", "XJ33", "XJ38", "XJ39",
"XJ4", "XJ40", "XJ41", "XJ42", "XJ8", "XM3", "XMX1", "XN1", "XN2",
"XN3", "XN4", "XN5A", "XN5B", "XN5C", "XN5D", "XN7", "XN8", "XN9",
"XS1A", "XS1B", "XS4", "XS7", "XSC1", "XSC10", "XSC11", "XSC14",
"XSC2", "XSC3", "XSC5", "XSC6", "XSC8", "XSW5", "XSW9", "XT10",
"XT11", "XT12", "XT13", "XT14", "XT3", "XT4", "XT5", "XT6", "XT7",
"XT8", "XT9", "XTH3", "XTH8", "XW1", "XW14", "XW19B", "XW2",
"XW20", "XW21", "XW22", "XW23", "XW23C", "XW5", "XWF3", "XWF5",
"XWY16", "XWY19A", "XWY19B", "XWY25", "XWY3", "XWY4"), class = "factor"),
Year = c(1961L, 1983L, 1986L, 1987L, 1990L, 1996L, 2001L,
2002L, 2006L, 2012L, 1954L, 1973L, 1977L, 1979L, 1980L, 1981L,
1985L, 1988L, 1991L, 1993L, 2001L, 2002L, 2007L, 2008L, 2010L,
2013L, 2018L, 1960L, 1961L, 1980L, 1983L, 1986L, 1998L, 2000L,
2001L, 2004L, 2007L, 2010L, 1956L, 1981L, 1982L, 1994L, 2003L,
2011L, 1959L, 1961L, 1965L, 1987L, 1989L, 2002L), Total = c(8L,
5L, 7L, 6L, 11L, 7L, 7L, 14L, 8L, 10L, 9L, 9L, 6L, 10L, 7L,
8L, 10L, 2L, 3L, 7L, 5L, 13L, 6L, 7L, 7L, 4L, 9L, 7L, 8L,
7L, 6L, 4L, 6L, 6L, 14L, 7L, 8L, 9L, 9L, 9L, 7L, 10L, 4L,
6L, 4L, 4L, 6L, 11L, 7L, 6L)), row.names = 2:51, class = "data.frame")
I have been trying to count the max number of consecutive years that a site has been used. The Total
column doesn't matter for now. I can isolate consecutive years and identify them using variations of
s <- split(df$Year, cumsum(c(TRUE, diff(df$Year) != 1)))
but this doesn't give me what I want which ideally would look something like
Site Max Consecutive Years Range
B10 10 1947-1956
B107 2 2000-2001
B122 8 1988-1995
If anyone can point me in the right direction I would be very grateful
CodePudding user response:
Maybe this helps, there are certainly faster ways. The idea is to build an indicator whether there are consecutive rows and filter for more than one occurence per group (i.e. consecutive rows).
df %>%
group_split(Site) %>%
map_dfr(~ .x %>%
mutate(consec_helper = cumsum(c(1, diff(Year) != 1))) %>%
group_by(consec_helper) %>%
filter(n() > 1) %>%
mutate(
count_consectuive_years = n(),
period = stringr::str_c(first(Year), "-", last(Year))
) %>%
ungroup()) %>%
select(-consec_helper, -Year) %>%
distinct(Site, period, .keep_all = T)
Result:
Site Total count_consectuive_years period
B1 7 2 1986-1987
B1 7 2 2001-2002
B10 10 3 1979-1981
B10 5 2 2001-2002
B10 6 2 2007-2008
B100 7 2 1960-1961
B100 6 2 2000-2001
B101 9 2 1981-1982
CodePudding user response:
Another solution using dplyr
df2 <- df %>% group_by(Site) %>% mutate(a=cumsum(c(TRUE, diff(Year) != 1))) %>% #Using your variable
group_by(Site,a) %>% summarise(Range = if_else(min(Year)!=max(Year),paste(min(Year),max(Year),sep="-"),as.character(min(Year)))
, Max = sum(Total)) %>% #Calculating ranges and number of visits grouping by your variable
group_by(Site) %>% slice(which.max(Max)) %>% select(-a) # Taking max, deleting a
CodePudding user response:
Another possible solution:
library(tidyverse)
df %>%
group_by(Site) %>%
mutate(aux = (Year == (lead(Year, default = 0) - 1))) %>%
mutate(aux2 = data.table::rleid(aux)) %>%
ungroup() %>%
filter(aux) %>%
add_count(Site, aux2) %>%
mutate(n = n 1) %>%
group_by(Site, aux2, n) %>%
summarise(Range = str_c(min(Year), max(Year) 1, sep = "-"), .groups = "drop") %>%
select(-aux2)
#> # A tibble: 8 × 3
#> Site n Range
#> <fct> <dbl> <chr>
#> 1 B1 2 1986-1987
#> 2 B1 2 2001-2002
#> 3 B10 3 1979-1981
#> 4 B10 2 2001-2002
#> 5 B10 2 2007-2008
#> 6 B100 2 1960-1961
#> 7 B100 2 2000-2001
#> 8 B101 2 1981-1982