Подмножество данных с нерегулярным интервалом в функции R - PullRequest
0 голосов
/ 17 июня 2020

У меня есть такая функция

extract = function(x)
{
a = x$2007[6:18]
b = x$2007[30:42]
c = x$2007[54:66]
}

, подмножество должно продолжаться до 744 таким образом. Мне нужно пропустить первые 6 точек данных, а затем вытащить каждые остальные 12 точек в новый объект или список. Есть ли более элегантный способ сделать это с помощью for l oop или применить?

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Боковое примечание: если 2007 действительно имя столбца (вам пришлось бы сделать это явно, R по умолчанию преобразовывает числа в имена, начинающиеся с букв, см. make.names("2007")), затем x$"2007"[6:18] (et c) должен работать для ссылки на столбец.

Чтобы сгенерировать эту последовательность целых чисел, давайте попробуем

nr <- 100
ind <- seq(6, nr, by = 12)
ind
# [1]  6 18 30 42 54 66 78 90
ind[ seq_along(ind) %% 2 == 1 ]
# [1]  6 30 54 78
ind[ seq_along(ind) %% 2 == 0 ]
# [1] 18 42 66 90
Map(seq, ind[ seq_along(ind) %% 2 == 1 ], ind[ seq_along(ind) %% 2 == 0 ])
# [[1]]
#  [1]  6  7  8  9 10 11 12 13 14 15 16 17 18
# [[2]]
#  [1] 30 31 32 33 34 35 36 37 38 39 40 41 42
# [[3]]
#  [1] 54 55 56 57 58 59 60 61 62 63 64 65 66
# [[4]]
#  [1] 78 79 80 81 82 83 84 85 86 87 88 89 90

Итак, вы можете использовать это в своей функции для создания списка подмножеств:

nr <- nrow(x)
ind <- seq(6, nr, by = 12)
out <- lapply(Map(seq, ind[ seq_along(ind) %% 2 == 1 ], ind[ seq_along(ind) %% 2 == 0 ]),
              function(i) x$"2007"[i])
1 голос
/ 17 июня 2020

мы могли бы использовать

split( x[7:744] , cut(7:744,seq(7,744,12)) )
...