I am struggling to write a 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
are not equal, then 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"))
CodePudding user response:
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