Подмножество кадра данных на основе повторяющегося шаблона - PullRequest
1 голос
/ 05 февраля 2020

Я пытаюсь разделить большой фрейм данных, который я импортировал из Excel, на несколько небольших фреймов данных. Я хочу сгруппировать 14 строк данных каждые 5 строк в отдельные фреймы данных.

Я пытался использовать для l oop, используя:

for (i in 1:nrow){
a = i + 5
b = a + 14
Data <- Dataframe[a:b,]
i = b
}

Однако это не работает, я также попытался определить последовательность a <- seq(from = 11, to = x, by = 19) и использовать ее в качестве ссылки на ячейку, это хорошо работает для первого, но с ошибками, говоря:

В числовом выражении a: b: 13 элементов: только первый использованный

1 Ответ

0 голосов
/ 05 февраля 2020

Если вы имеете в виду, что у вас есть 14 строк данных и вы хотите сгруппировать их по 5, то

dat <- head(mtcars, n = 14)
(seq_len(nrow(dat))-1) %/% 5
#  [1] 0 0 0 0 0 1 1 1 1 1 2 2 2 2
split(dat, (seq_len(nrow(dat))-1) %/% 5)
# $`0`
#                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
# Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
# Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
# $`1`
#             mpg cyl  disp  hp drat   wt  qsec vs am gear carb
# Valiant    18.1   6 225.0 105 2.76 3.46 20.22  1  0    3    1
# Duster 360 14.3   8 360.0 245 3.21 3.57 15.84  0  0    3    4
# Merc 240D  24.4   4 146.7  62 3.69 3.19 20.00  1  0    4    2
# Merc 230   22.8   4 140.8  95 3.92 3.15 22.90  1  0    4    2
# Merc 280   19.2   6 167.6 123 3.92 3.44 18.30  1  0    4    4
# $`2`
#              mpg cyl  disp  hp drat   wt qsec vs am gear carb
# Merc 280C   17.8   6 167.6 123 3.92 3.44 18.9  1  0    4    4
# Merc 450SE  16.4   8 275.8 180 3.07 4.07 17.4  0  0    3    3
# Merc 450SL  17.3   8 275.8 180 3.07 3.73 17.6  0  0    3    3
# Merc 450SLC 15.2   8 275.8 180 3.07 3.78 18.0  0  0    3    3

Если, однако, вы имеете в виду 14 строк, каждая из которых начинается с интервалами в 5 строк, то

seq(1, nrow(mtcars), by=5)
# [1]  1  6 11 16 21 26 31
lapply(seq(1, nrow(mtcars), by=5),
       function(start) mtcars[start:min(nrow(mtcars), start+13),])
# [[1]]
#                    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4         21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
# Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
# Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
# Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
# Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
# Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
# Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
# Merc 230          22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
# Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
# Merc 280C         17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
# Merc 450SE        16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
# Merc 450SL        17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
# Merc 450SLC       15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
# [[2]]
#                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
# Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
# Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
# Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
# Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
# Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
# Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
# Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
# Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
# Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
# Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
# Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
# Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
# Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
# Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
### ...

В качестве альтернативы

Map(function(s,e) mtcars[(s:e),], starts, pmin(starts+13, nrow(mtcars)))
...