Цикл по первым 100 значениям, затем цикл по следующим 100 значениям - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть вектор значений True и False. Длина вектора 1000.

vect <- [T T F T F F..... x1000]

Я хочу перебрать первые 100 (т. Е. 1: 100) значений и рассчитать количество истинных и ложных значений и сохранить результат в некоторой переменной (например, True <- 51, False <- 49). Затем выполните цикл по следующим 100 значениям (101: 200) и выполните те же вычисления, что и раньше, и так далее, пока я не достигну 1000. </p>

Код ниже довольно стандартный, но вместо нарезки вектора он вычисляет суммы для всего вектора.

count_True = 0
count_False = 0
for (i in vect){
    if (i == 'T'){
        count_True = count_True + 1
    }
    else {
        count_false = count_false + 1
    }
}

Я знаю, что вы можете разделить вектор на

vect_splt <- split(vect,10)

но есть ли способ объединить их, чтобы сделать то, что я хотел, или каким-либо другим способом?

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Делает что-то вроде этой работы:

set.seed(42)
vect <- sample(rep(c(T, F), 500))

vect <- tibble(vect)
vect %>%
  mutate(seq = row_number() %/% 100) %>%
  group_by(seq) %>%
  summarise(n_TRUE = sum(vect),
            n_FALSE = sum(!vect))
# A tibble: 11 x 3
     seq n_TRUE n_FALSE
   <dbl>  <int>   <int>
 1     0     42      57
 2     1     56      44
 3     2     50      50
 4     3     55      45
 5     4     43      57
 6     5     48      52
 7     6     48      52
 8     7     54      46
 9     8     51      49
10     9     53      47
11    10      0       1
0 голосов
/ 09 апреля 2019

Мы можем использовать split по table. С индексом группировки, созданным с помощью gl, split vector в list из vector с, получите счет с помощью table и сохраните его в list

out <- lapply(split(vect, as.integer(gl(length(vect), 100, length(vect)))), table)

Его можно преобразовать в один набор данных с помощью rbind ing

out1 <- do.call(rbind, out)

данные

set.seed(24)
vect <- sample(c(TRUE, FALSE), 1000, replace  = TRUE)
...