Dplyr group based on similarities

Advertisements

I struggling to write ba simple dplyr code for this problem. If values per id are equal from day 1 till day 7 I would like to create a n column and insert 7 from day 1 till day 7. Otherwise if 'values‘ per id not equal insert 0. How can I do this?

Desired output:

Sample data:

structure(list(id = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 
    2, 3, 3, 3, 3, 3, 3), variable = structure(c(1L, 145L, 289L, 
    433L, 577L, 721L, 865L, 2L, 146L, 290L, 434L, 578L, 722L, 866L, 
    3L, 147L, 291L, 435L, 579L, 723L), .Label = c("ha1_001", "ha1_002", 
    "ha1_003", "ha1_004", "ha1_005", "ha1_006", "ha1_007", "ha1_008", 
    "ha1_009", "ha1_010", "ha1_011", "ha1_012", "ha1_013", "ha1_014", 
    "ha1_015", "ha1_016", "ha1_017", "ha1_018", "ha1_019", "ha1_020", 
    "ha1_021", "ha1_022", "ha1_023", "ha1_024", "ha1_025", "ha1_026", 
    "ha1_027", "ha1_028", "ha1_029", "ha1_030", "ha1_031", "ha1_032", 
    "ha1_033", "ha1_034", "ha1_035", "ha1_036", "ha1_037", "ha1_038", 
    "ha1_039", "ha1_040", "ha1_041", "ha1_042", "ha1_043", "ha1_044", 
    "ha1_045", "ha1_046", "ha1_047", "ha1_048", "ha1_049", "ha1_050", 
    "ha1_051", "ha1_052", "ha1_053", "ha1_054", "ha1_055", "ha1_056", 
    "ha1_057", "ha1_058", "ha1_059", "ha1_060", "ha1_061", "ha1_062", 
    "ha1_063", "ha1_064", "ha1_065", "ha1_066", "ha1_067", "ha1_068", 
    "ha1_069", "ha1_070", "ha1_071", "ha1_072", "ha1_073", "ha1_074", 
    "ha1_075", "ha1_076", "ha1_077", "ha1_078", "ha1_079", "ha1_080", 
    "ha1_081", "ha1_082", "ha1_083", "ha1_084", "ha1_085", "ha1_086", 
    "ha1_087", "ha1_088", "ha1_089", "ha1_090", "ha1_091", "ha1_092", 
    "ha1_093", "ha1_094", "ha1_095", "ha1_096", "ha1_097", "ha1_098", 
    "ha1_099", "ha1_100", "ha1_101", "ha1_102", "ha1_103", "ha1_104", 
    "ha1_105", "ha1_106", "ha1_107", "ha1_108", "ha1_109", "ha1_110", 
    "ha1_111", "ha1_112", "ha1_113", "ha1_114", "ha1_115", "ha1_116", 
    "ha1_117", "ha1_118", "ha1_119", "ha1_120", "ha1_121", "ha1_122", 
    "ha1_123", "ha1_124", "ha1_125", "ha1_126", "ha1_127", "ha1_128", 
    "ha1_129", "ha1_130", "ha1_131", "ha1_132", "ha1_133", "ha1_134", 
    "ha1_135", "ha1_136", "ha1_137", "ha1_138", "ha1_139", "ha1_140", 
    "ha1_141", "ha1_142", "ha1_143", "ha1_144", "ha2_001", "ha2_002", 
    "ha2_003", "ha2_004", "ha2_005", "ha2_006", "ha2_007", "ha2_008", 
    "ha2_009", "ha2_010", "ha2_011", "ha2_012", "ha2_013", "ha2_014", 
    "ha2_015", "ha2_016", "ha2_017", "ha2_018", "ha2_019", "ha2_020", 
    "ha2_021", "ha2_022", "ha2_023", "ha2_024", "ha2_025", "ha2_026", 
    "ha2_027", "ha2_028", "ha2_029", "ha2_030", "ha2_031", "ha2_032", 
    "ha2_033", "ha2_034", "ha2_035", "ha2_036", "ha2_037", "ha2_038", 
    "ha2_039", "ha2_040", "ha2_041", "ha2_042", "ha2_043", "ha2_044", 
    "ha2_045", "ha2_046", "ha2_047", "ha2_048", "ha2_049", "ha2_050", 
    "ha2_051", "ha2_052", "ha2_053", "ha2_054", "ha2_055", "ha2_056", 
    "ha2_057", "ha2_058", "ha2_059", "ha2_060", "ha2_061", "ha2_062", 
    "ha2_063", "ha2_064", "ha2_065", "ha2_066", "ha2_067", "ha2_068", 
    "ha2_069", "ha2_070", "ha2_071", "ha2_072", "ha2_073", "ha2_074", 
    "ha2_075", "ha2_076", "ha2_077", "ha2_078", "ha2_079", "ha2_080", 
    "ha2_081", "ha2_082", "ha2_083", "ha2_084", "ha2_085", "ha2_086", 
    "ha2_087", "ha2_088", "ha2_089", "ha2_090", "ha2_091", "ha2_092", 
    "ha2_093", "ha2_094", "ha2_095", "ha2_096", "ha2_097", "ha2_098", 
    "ha2_099", "ha2_100", "ha2_101", "ha2_102", "ha2_103", "ha2_104", 
    "ha2_105", "ha2_106", "ha2_107", "ha2_108", "ha2_109", "ha2_110", 
    "ha2_111", "ha2_112", "ha2_113", "ha2_114", "ha2_115", "ha2_116", 
    "ha2_117", "ha2_118", "ha2_119", "ha2_120", "ha2_121", "ha2_122", 
    "ha2_123", "ha2_124", "ha2_125", "ha2_126", "ha2_127", "ha2_128", 
    "ha2_129", "ha2_130", "ha2_131", "ha2_132", "ha2_133", "ha2_134", 
    "ha2_135", "ha2_136", "ha2_137", "ha2_138", "ha2_139", "ha2_140", 
    "ha2_141", "ha2_142", "ha2_143", "ha2_144", "ha3_001", "ha3_002", 
    "ha3_003", "ha3_004", "ha3_005", "ha3_006", "ha3_007", "ha3_008", 
    "ha3_009", "ha3_010", "ha3_011", "ha3_012", "ha3_013", "ha3_014", 
    "ha3_015", "ha3_016", "ha3_017", "ha3_018", "ha3_019", "ha3_020", 
    "ha3_021", "ha3_022", "ha3_023", "ha3_024", "ha3_025", "ha3_026", 
    "ha3_027", "ha3_028", "ha3_029", "ha3_030", "ha3_031", "ha3_032", 
    "ha3_033", "ha3_034", "ha3_035", "ha3_036", "ha3_037", "ha3_038", 
    "ha3_039", "ha3_040", "ha3_041", "ha3_042", "ha3_043", "ha3_044", 
    "ha3_045", "ha3_046", "ha3_047", "ha3_048", "ha3_049", "ha3_050", 
    "ha3_051", "ha3_052", "ha3_053", "ha3_054", "ha3_055", "ha3_056", 
    "ha3_057", "ha3_058", "ha3_059", "ha3_060", "ha3_061", "ha3_062", 
    "ha3_063", "ha3_064", "ha3_065", "ha3_066", "ha3_067", "ha3_068", 
    "ha3_069", "ha3_070", "ha3_071", "ha3_072", "ha3_073", "ha3_074", 
    "ha3_075", "ha3_076", "ha3_077", "ha3_078", "ha3_079", "ha3_080", 
    "ha3_081", "ha3_082", "ha3_083", "ha3_084", "ha3_085", "ha3_086", 
    "ha3_087", "ha3_088", "ha3_089", "ha3_090", "ha3_091", "ha3_092", 
    "ha3_093", "ha3_094", "ha3_095", "ha3_096", "ha3_097", "ha3_098", 
    "ha3_099", "ha3_100", "ha3_101", "ha3_102", "ha3_103", "ha3_104", 
    "ha3_105", "ha3_106", "ha3_107", "ha3_108", "ha3_109", "ha3_110", 
    "ha3_111", "ha3_112", "ha3_113", "ha3_114", "ha3_115", "ha3_116", 
    "ha3_117", "ha3_118", "ha3_119", "ha3_120", "ha3_121", "ha3_122", 
    "ha3_123", "ha3_124", "ha3_125", "ha3_126", "ha3_127", "ha3_128", 
    "ha3_129", "ha3_130", "ha3_131", "ha3_132", "ha3_133", "ha3_134", 
    "ha3_135", "ha3_136", "ha3_137", "ha3_138", "ha3_139", "ha3_140", 
    "ha3_141", "ha3_142", "ha3_143", "ha3_144", "ha4_001", "ha4_002", 
    "ha4_003", "ha4_004", "ha4_005", "ha4_006", "ha4_007", "ha4_008", 
    "ha4_009", "ha4_010", "ha4_011", "ha4_012", "ha4_013", "ha4_014", 
    "ha4_015", "ha4_016", "ha4_017", "ha4_018", "ha4_019", "ha4_020", 
    "ha4_021", "ha4_022", "ha4_023", "ha4_024", "ha4_025", "ha4_026", 
    "ha4_027", "ha4_028", "ha4_029", "ha4_030", "ha4_031", "ha4_032", 
    "ha4_033", "ha4_034", "ha4_035", "ha4_036", "ha4_037", "ha4_038", 
    "ha4_039", "ha4_040", "ha4_041", "ha4_042", "ha4_043", "ha4_044", 
    "ha4_045", "ha4_046", "ha4_047", "ha4_048", "ha4_049", "ha4_050", 
    "ha4_051", "ha4_052", "ha4_053", "ha4_054", "ha4_055", "ha4_056", 
    "ha4_057", "ha4_058", "ha4_059", "ha4_060", "ha4_061", "ha4_062", 
    "ha4_063", "ha4_064", "ha4_065", "ha4_066", "ha4_067", "ha4_068", 
    "ha4_069", "ha4_070", "ha4_071", "ha4_072", "ha4_073", "ha4_074", 
    "ha4_075", "ha4_076", "ha4_077", "ha4_078", "ha4_079", "ha4_080", 
    "ha4_081", "ha4_082", "ha4_083", "ha4_084", "ha4_085", "ha4_086", 
    "ha4_087", "ha4_088", "ha4_089", "ha4_090", "ha4_091", "ha4_092", 
    "ha4_093", "ha4_094", "ha4_095", "ha4_096", "ha4_097", "ha4_098", 
    "ha4_099", "ha4_100", "ha4_101", "ha4_102", "ha4_103", "ha4_104", 
    "ha4_105", "ha4_106", "ha4_107", "ha4_108", "ha4_109", "ha4_110", 
    "ha4_111", "ha4_112", "ha4_113", "ha4_114", "ha4_115", "ha4_116", 
    "ha4_117", "ha4_118", "ha4_119", "ha4_120", "ha4_121", "ha4_122", 
    "ha4_123", "ha4_124", "ha4_125", "ha4_126", "ha4_127", "ha4_128", 
    "ha4_129", "ha4_130", "ha4_131", "ha4_132", "ha4_133", "ha4_134", 
    "ha4_135", "ha4_136", "ha4_137", "ha4_138", "ha4_139", "ha4_140", 
    "ha4_141", "ha4_142", "ha4_143", "ha4_144", "ha5_001", "ha5_002", 
    "ha5_003", "ha5_004", "ha5_005", "ha5_006", "ha5_007", "ha5_008", 
    "ha5_009", "ha5_010", "ha5_011", "ha5_012", "ha5_013", "ha5_014", 
    "ha5_015", "ha5_016", "ha5_017", "ha5_018", "ha5_019", "ha5_020", 
    "ha5_021", "ha5_022", "ha5_023", "ha5_024", "ha5_025", "ha5_026", 
    "ha5_027", "ha5_028", "ha5_029", "ha5_030", "ha5_031", "ha5_032", 
    "ha5_033", "ha5_034", "ha5_035", "ha5_036", "ha5_037", "ha5_038", 
    "ha5_039", "ha5_040", "ha5_041", "ha5_042", "ha5_043", "ha5_044", 
    "ha5_045", "ha5_046", "ha5_047", "ha5_048", "ha5_049", "ha5_050", 
    "ha5_051", "ha5_052", "ha5_053", "ha5_054", "ha5_055", "ha5_056", 
    "ha5_057", "ha5_058", "ha5_059", "ha5_060", "ha5_061", "ha5_062", 
    "ha5_063", "ha5_064", "ha5_065", "ha5_066", "ha5_067", "ha5_068", 
    "ha5_069", "ha5_070", "ha5_071", "ha5_072", "ha5_073", "ha5_074", 
    "ha5_075", "ha5_076", "ha5_077", "ha5_078", "ha5_079", "ha5_080", 
    "ha5_081", "ha5_082", "ha5_083", "ha5_084", "ha5_085", "ha5_086", 
    "ha5_087", "ha5_088", "ha5_089", "ha5_090", "ha5_091", "ha5_092", 
    "ha5_093", "ha5_094", "ha5_095", "ha5_096", "ha5_097", "ha5_098", 
    "ha5_099", "ha5_100", "ha5_101", "ha5_102", "ha5_103", "ha5_104", 
    "ha5_105", "ha5_106", "ha5_107", "ha5_108", "ha5_109", "ha5_110", 
    "ha5_111", "ha5_112", "ha5_113", "ha5_114", "ha5_115", "ha5_116", 
    "ha5_117", "ha5_118", "ha5_119", "ha5_120", "ha5_121", "ha5_122", 
    "ha5_123", "ha5_124", "ha5_125", "ha5_126", "ha5_127", "ha5_128", 
    "ha5_129", "ha5_130", "ha5_131", "ha5_132", "ha5_133", "ha5_134", 
    "ha5_135", "ha5_136", "ha5_137", "ha5_138", "ha5_139", "ha5_140", 
    "ha5_141", "ha5_142", "ha5_143", "ha5_144", "ha6_001", "ha6_002", 
    "ha6_003", "ha6_004", "ha6_005", "ha6_006", "ha6_007", "ha6_008", 
    "ha6_009", "ha6_010", "ha6_011", "ha6_012", "ha6_013", "ha6_014", 
    "ha6_015", "ha6_016", "ha6_017", "ha6_018", "ha6_019", "ha6_020", 
    "ha6_021", "ha6_022", "ha6_023", "ha6_024", "ha6_025", "ha6_026", 
    "ha6_027", "ha6_028", "ha6_029", "ha6_030", "ha6_031", "ha6_032", 
    "ha6_033", "ha6_034", "ha6_035", "ha6_036", "ha6_037", "ha6_038", 
    "ha6_039", "ha6_040", "ha6_041", "ha6_042", "ha6_043", "ha6_044", 
    "ha6_045", "ha6_046", "ha6_047", "ha6_048", "ha6_049", "ha6_050", 
    "ha6_051", "ha6_052", "ha6_053", "ha6_054", "ha6_055", "ha6_056", 
    "ha6_057", "ha6_058", "ha6_059", "ha6_060", "ha6_061", "ha6_062", 
    "ha6_063", "ha6_064", "ha6_065", "ha6_066", "ha6_067", "ha6_068", 
    "ha6_069", "ha6_070", "ha6_071", "ha6_072", "ha6_073", "ha6_074", 
    "ha6_075", "ha6_076", "ha6_077", "ha6_078", "ha6_079", "ha6_080", 
    "ha6_081", "ha6_082", "ha6_083", "ha6_084", "ha6_085", "ha6_086", 
    "ha6_087", "ha6_088", "ha6_089", "ha6_090", "ha6_091", "ha6_092", 
    "ha6_093", "ha6_094", "ha6_095", "ha6_096", "ha6_097", "ha6_098", 
    "ha6_099", "ha6_100", "ha6_101", "ha6_102", "ha6_103", "ha6_104", 
    "ha6_105", "ha6_106", "ha6_107", "ha6_108", "ha6_109", "ha6_110", 
    "ha6_111", "ha6_112", "ha6_113", "ha6_114", "ha6_115", "ha6_116", 
    "ha6_117", "ha6_118", "ha6_119", "ha6_120", "ha6_121", "ha6_122", 
    "ha6_123", "ha6_124", "ha6_125", "ha6_126", "ha6_127", "ha6_128", 
    "ha6_129", "ha6_130", "ha6_131", "ha6_132", "ha6_133", "ha6_134", 
    "ha6_135", "ha6_136", "ha6_137", "ha6_138", "ha6_139", "ha6_140", 
    "ha6_141", "ha6_142", "ha6_143", "ha6_144", "ha7_001", "ha7_002", 
    "ha7_003", "ha7_004", "ha7_005", "ha7_006", "ha7_007", "ha7_008", 
    "ha7_009", "ha7_010", "ha7_011", "ha7_012", "ha7_013", "ha7_014", 
    "ha7_015", "ha7_016", "ha7_017", "ha7_018", "ha7_019", "ha7_020", 
    "ha7_021", "ha7_022", "ha7_023", "ha7_024", "ha7_025", "ha7_026", 
    "ha7_027", "ha7_028", "ha7_029", "ha7_030", "ha7_031", "ha7_032", 
    "ha7_033", "ha7_034", "ha7_035", "ha7_036", "ha7_037", "ha7_038", 
    "ha7_039", "ha7_040", "ha7_041", "ha7_042", "ha7_043", "ha7_044", 
    "ha7_045", "ha7_046", "ha7_047", "ha7_048", "ha7_049", "ha7_050", 
    "ha7_051", "ha7_052", "ha7_053", "ha7_054", "ha7_055", "ha7_056", 
    "ha7_057", "ha7_058", "ha7_059", "ha7_060", "ha7_061", "ha7_062", 
    "ha7_063", "ha7_064", "ha7_065", "ha7_066", "ha7_067", "ha7_068", 
    "ha7_069", "ha7_070", "ha7_071", "ha7_072", "ha7_073", "ha7_074", 
    "ha7_075", "ha7_076", "ha7_077", "ha7_078", "ha7_079", "ha7_080", 
    "ha7_081", "ha7_082", "ha7_083", "ha7_084", "ha7_085", "ha7_086", 
    "ha7_087", "ha7_088", "ha7_089", "ha7_090", "ha7_091", "ha7_092", 
    "ha7_093", "ha7_094", "ha7_095", "ha7_096", "ha7_097", "ha7_098", 
    "ha7_099", "ha7_100", "ha7_101", "ha7_102", "ha7_103", "ha7_104", 
    "ha7_105", "ha7_106", "ha7_107", "ha7_108", "ha7_109", "ha7_110", 
    "ha7_111", "ha7_112", "ha7_113", "ha7_114", "ha7_115", "ha7_116", 
    "ha7_117", "ha7_118", "ha7_119", "ha7_120", "ha7_121", "ha7_122", 
    "ha7_123", "ha7_124", "ha7_125", "ha7_126", "ha7_127", "ha7_128", 
    "ha7_129", "ha7_130", "ha7_131", "ha7_132", "ha7_133", "ha7_134", 
    "ha7_135", "ha7_136", "ha7_137", "ha7_138", "ha7_139", "ha7_140", 
    "ha7_141", "ha7_142", "ha7_143", "ha7_144"), class = "factor"), 
        value = c(110, 110, 110, 110, 110, 110, 110, 9990, 110, 110, 
        110, 110, 110, 9990, 110, 110, 110, 110, 8310, 110), day = c(1, 
        2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6), 
        timeslot = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 
        3, 3, 3, 3, 3)), row.names = c(NA, -20L), groups = structure(list(
        id = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 
        3, 3, 3), day = c(1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 
        7, 1, 2, 3, 4, 5, 6), timeslot = c(1, 1, 1, 1, 1, 1, 1, 2, 
        2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3), value = c(110, 110, 
        110, 110, 110, 110, 110, 9990, 110, 110, 110, 110, 110, 9990, 
        110, 110, 110, 110, 8310, 110), .rows = structure(list(1L, 
            2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
            15L, 16L, 17L, 18L, 19L, 20L), ptype = integer(0), class = c("vctrs_list_of", 
        "vctrs_vctr", "list"))), row.names = c(NA, -20L), class = c("tbl_df", 
    "tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
    "tbl_df", "tbl", "data.frame"))

>Solution :

We could use n_distinct() within an ifelse statement:

library(dplyr)
df %>% 
  group_by(id) %>% 
  mutate(n = ifelse(n_distinct(value)==1, n(), 0))
 id variable value   day timeslot     n
   <dbl> <fct>    <dbl> <dbl>    <dbl> <dbl>
 1     1 ha1_001    110     1        1     7
 2     1 ha2_001    110     2        1     7
 3     1 ha3_001    110     3        1     7
 4     1 ha4_001    110     4        1     7
 5     1 ha5_001    110     5        1     7
 6     1 ha6_001    110     6        1     7
 7     1 ha7_001    110     7        1     7
 8     2 ha1_002   9990     1        2     0
 9     2 ha2_002    110     2        2     0
10     2 ha3_002    110     3        2     0
11     2 ha4_002    110     4        2     0
12     2 ha5_002    110     5        2     0
13     2 ha6_002    110     6        2     0
14     2 ha7_002   9990     7        2     0
15     3 ha1_003    110     1        3     0
16     3 ha2_003    110     2        3     0
17     3 ha3_003    110     3        3     0
18     3 ha4_003    110     4        3     0
19     3 ha5_003   8310     5        3     0
20     3 ha6_003    110     6        3     0

Leave a ReplyCancel reply