我有一个 Dataframe ,如下所示:
df <- structure(list(id = c("A", "A", "A", "A", "A", "A", "A", "A",
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A",
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B",
"B", "B", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C",
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C",
"C", "C", "C", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D",
"D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "E", "E",
"E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E",
"E", "E", "E", "E", "E", "E", "F", "F", "F", "F", "F", "F", "F",
"F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F",
"F", "G", "G", "G", "G", "G", "G", "G", "G", "G", "G", "G", "G",
"G", "G", "G", "G", "G", "G", "G", "G", "G", "H", "H", "H", "H",
"H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H",
"H", "H", "H", "H", "I", "I", "I", "I", "I", "I", "I", "I", "I",
"I", "I", "I", "I", "I", "I", "I", "I", "I", "I", "I", "I"),
category = c("Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange"), number = structure(c(1L,
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L,
6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L,
4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L,
2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L,
7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L,
5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 3L,
3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 1L,
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L,
6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L,
4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L,
2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L,
7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L,
5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L), levels = c("1", "2", "3",
"4", "5", "6", "7"), class = "factor"), value = c(NA, 626.003642929148,
14.8530720820503, 1084.38927965752, 471.655282952508, 64.7236912331857,
776.07706769966, 396.916793965147, 54.4855105782135, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 545.062982509092,
1.91732773771467, NA, NA, NA, NA, NA, NA, NA, NA, NA, 394.894986584073,
195.280219395579, 7.64479280434642, 22.0315874609581, NA,
NA, NA, NA, NA, NA, NA, NA, 1080.64933432694, 805.86292498854,
13.482712704827, NA, NA, NA, NA, NA, NA, 1245.98805385198,
460.473209104431, 7.63424473634, 890.478501410027, 660.395220925587,
9.17592533879766, NA, 299.959907306427, 11.4907173073867,
NA, 491.805140195306, 177.400798058143, NA, NA, NA, NA, NA,
NA, 184.289228960705, 771.021642313767, 6.31043426543333,
281.726609330022, NA, NA, NA, NA, NA, NA, NA, NA, NA, 509.378049364324,
278.038058491692, 527.80894112378, 975.632789695641, 228.599356169827,
760.529109540798, 25.8508640237331, 208.36160360409, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 857.05785408852,
348.960106993208, 95.34862608411, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 643.00490054136,
176.787378197281, 454.641131289842, 875.117995998053, 89.4833304141165,
854.237890262158, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, 657.837193971776, 201.407816618736, 218.002918108005,
981.375399584459, 252.181299279728, 254.482264508715, NA,
NA, 237.354256272709, NA, NA, 346.67665285344, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, 207.808025637129, 418.411113648792,
30.3048309454833, 990.842297838783, 560.436400795975, 27.8512837727917,
1024.57867280143, 568.935110651167, 26.6536802259542, 887.976034157129,
NA, NA, NA, NA, NA, NA, NA, NA)), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -189L), groups = structure(list(
id = c("A", "A", "A", "A", "A", "A", "A", "B", "B", "B",
"B", "B", "B", "B", "C", "C", "C", "C", "C", "C", "C", "D",
"D", "D", "D", "D", "D", "D", "E", "E", "E", "E", "E", "E",
"E", "F", "F", "F", "F", "F", "F", "F", "G", "G", "G", "G",
"G", "G", "G", "H", "H", "H", "H", "H", "H", "H", "I", "I",
"I", "I", "I", "I", "I"), number = structure(c(1L, 2L, 3L,
4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L,
5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L,
6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L,
7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L
), levels = c("1", "2", "3", "4", "5", "6", "7"), class = "factor"),
.rows = structure(list(1:3, 4:6, 7:9, 10:12, 13:15, 16:18,
19:21, 22:24, 25:27, 28:30, 31:33, 34:36, 37:39, 40:42,
43:45, 46:48, 49:51, 52:54, 55:57, 58:60, 61:63, 64:66,
67:69, 70:72, 73:75, 76:78, 79:81, 82:84, 85:87, 88:90,
91:93, 94:96, 97:99, 100:102, 103:105, 106:108, 109:111,
112:114, 115:117, 118:120, 121:123, 124:126, 127:129,
130:132, 133:135, 136:138, 139:141, 142:144, 145:147,
148:150, 151:153, 154:156, 157:159, 160:162, 163:165,
166:168, 169:171, 172:174, 175:177, 178:180, 181:183,
184:186, 187:189), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -63L), .drop = TRUE))
正如您所看到的,在values列中有许多示例都有NA。(在每个id内),其中我取一个3行窗口(第1步,共1步),并添加分组标签(在本例中标记为ID_group_groupnumber)。重要的是,每个其它类别(“苹果”、“香蕉”和“橙子”)的一个单个值需要出现在最后一组中。
输出应该如下所示,其中组只能是3行,并且每次此规则不适用时,都会使用NA值作为标签。
df <- structure(list(id = c("A", "A", "A", "A", "A", "A", "A", "A",
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A",
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B",
"B", "B", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C",
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C",
"C", "C", "C", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D",
"D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "E", "E",
"E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E",
"E", "E", "E", "E", "E", "E", "F", "F", "F", "F", "F", "F", "F",
"F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F",
"F", "G", "G", "G", "G", "G", "G", "G", "G", "G", "G", "G", "G",
"G", "G", "G", "G", "G", "G", "G", "G", "G", "H", "H", "H", "H",
"H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H",
"H", "H", "H", "H", "I", "I", "I", "I", "I", "I", "I", "I", "I",
"I", "I", "I", "I", "I", "I", "I", "I", "I", "I", "I", "I"),
category = c("Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange", "Banana", "Apple",
"Orange", "Banana", "Apple", "Orange"), number = structure(c(1L,
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L,
6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L,
4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L,
2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L,
7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L,
5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 3L,
3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 1L,
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L,
6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L,
4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 1L, 1L, 1L, 2L,
2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L,
7L, 7L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L,
5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L), levels = c("1", "2", "3",
"4", "5", "6", "7"), class = "factor"), value = c(NA, 626.003642929148,
14.8530720820503, 1084.38927965752, 471.655282952508, 64.7236912331857,
776.07706769966, 396.916793965147, 54.4855105782135, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 545.062982509092,
1.91732773771467, NA, NA, NA, NA, NA, NA, NA, NA, NA, 394.894986584073,
195.280219395579, 7.64479280434642, 22.0315874609581, NA,
NA, NA, NA, NA, NA, NA, NA, 1080.64933432694, 805.86292498854,
13.482712704827, NA, NA, NA, NA, NA, NA, 1245.98805385198,
460.473209104431, 7.63424473634, 890.478501410027, 660.395220925587,
9.17592533879766, NA, 299.959907306427, 11.4907173073867,
NA, 491.805140195306, 177.400798058143, NA, NA, NA, NA, NA,
NA, 184.289228960705, 771.021642313767, 6.31043426543333,
281.726609330022, NA, NA, NA, NA, NA, NA, NA, NA, NA, 509.378049364324,
278.038058491692, 527.80894112378, 975.632789695641, 228.599356169827,
760.529109540798, 25.8508640237331, 208.36160360409, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 857.05785408852,
348.960106993208, 95.34862608411, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 643.00490054136,
176.787378197281, 454.641131289842, 875.117995998053, 89.4833304141165,
854.237890262158, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, 657.837193971776, 201.407816618736, 218.002918108005,
981.375399584459, 252.181299279728, 254.482264508715, NA,
NA, 237.354256272709, NA, NA, 346.67665285344, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, 207.808025637129, 418.411113648792,
30.3048309454833, 990.842297838783, 560.436400795975, 27.8512837727917,
1024.57867280143, 568.935110651167, 26.6536802259542, 887.976034157129,
NA, NA, NA, NA, NA, NA, NA, NA), grouping = c(NA, "A_group1",
"A_group1", "A_group1", "A_group2", "A_group2", "A_group2",
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "B_group1", "B_group1",
"B_group1", NA, NA, NA, NA, NA, NA, NA, NA, NA, "C_group1",
"C_group1", "C_group1", NA, NA, NA, NA, NA, NA, "C_group2",
"C_group2", "C_group2", "C_group3", "C_group3", "C_group3",
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "D_group1",
"D_group1", "D_group1", NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, "E_group1", "E_group1", "E_group1", "E_group2", "E_group2",
"E_group2", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, "F_group1", "F_group1", "F_group1", NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
"G_group1", "G_group1", "G_group1", "G_group2", "G_group2",
"G_group2", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, "H_group1", "H_group1", "H_group1", "H_group2",
"H_group2", "H_group2", NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, "I_group1", "I_group1", "I_group1",
"I_group2", "I_group2", "I_group2", "I_group3", "I_group3",
"I_group3", NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA,
-189L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"
), groups = structure(list(id = c("A", "A", "A", "A", "A", "A",
"A", "B", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C",
"C", "C", "D", "D", "D", "D", "D", "D", "D", "E", "E", "E", "E",
"E", "E", "E", "F", "F", "F", "F", "F", "F", "F", "G", "G", "G",
"G", "G", "G", "G", "H", "H", "H", "H", "H", "H", "H", "I", "I",
"I", "I", "I", "I", "I"), number = structure(c(1L, 2L, 3L, 4L,
5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L,
7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L,
2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L,
4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L), levels = c("1",
"2", "3", "4", "5", "6", "7"), class = "factor"), .rows = structure(list(
1:3, 4:6, 7:9, 10:12, 13:15, 16:18, 19:21, 22:24, 25:27,
28:30, 31:33, 34:36, 37:39, 40:42, 43:45, 46:48, 49:51, 52:54,
55:57, 58:60, 61:63, 64:66, 67:69, 70:72, 73:75, 76:78, 79:81,
82:84, 85:87, 88:90, 91:93, 94:96, 97:99, 100:102, 103:105,
106:108, 109:111, 112:114, 115:117, 118:120, 121:123, 124:126,
127:129, 130:132, 133:135, 136:138, 139:141, 142:144, 145:147,
148:150, 151:153, 154:156, 157:159, 160:162, 163:165, 166:168,
169:171, 172:174, 175:177, 178:180, 181:183, 184:186, 187:189), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -63L), .drop = TRUE))
我使用扩展网格将数据转换为这种格式,用于"类别“和”编号“列,因为我认为这样更容易识别分组。为了解决这个问题,我想到将其透视为宽格式(但是每个id都非常不同,我不确定如何按列分组),和rollapply,但不确定如何指定顺序查找3行而不使用NA。重要的是,不能发生重叠。我感谢r中对此的任何指导/方法。
非常感谢。
1条答案
按热度按时间u0njafvf1#
Number
输入一个向量并输出1:3重复的向量长度。不同之处在于如果1 ∶ 3不能均匀配合则在末端使用NA。
然后,在组内,对于NA或非NA的每次运行,使用
ave
应用Number
,然后按顺序对id内的三元组进行编号。最后,我们将grouping
名称和NA作为分组条目,这些条目应该是NA。