посчитать количество колебаний между 0 и 1 - PullRequest
0 голосов
/ 04 октября 2019

У меня есть случайная последовательность из 1 и 0, около 51 значения, и я хочу посчитать количество колебаний между «головами и хвостами». Если быть точным, у меня есть 27 значений от 0 до 24 из 1, и я хочу знать количество колебаний между 0 и 1. Я мог бы получить только число 0 и 1 по этому коду:

coin.tosses[coin.tosses==0]

и

coin.tosses[coin.tosses==1]

спасибо за помощь

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

Вы можете суммировать абсолютные различия, равные единице:

coin.tosses <- sample(c(0, 1), 51, replace = TRUE)
sum(abs(diff(coin.tosses)) == 1)

Если вы хотите считать только голову до хвоста или наоборот, удалите abs и проверьте равенство 1 или -1

1 голос
/ 04 октября 2019

Существуют различные способы сделать это. Мы можем сравнить каждый элемент с его следующим элементом и посчитать, сколько раз значение отличается

x <- c(1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0)

sum(x[-1] != x[-length(x)])
#[1] 7

Та же логика может применяться с head и tail

sum(head(x, -1) != tail(x, -1))

dplyr::lag

sum(x != dplyr::lag(x), na.rm = TRUE)

и data.table::shift

sum(x != data.table::shift(x), na.rm = TRUE)

Мы также можем использовать rle или rleid и подсчитать количество уникальных групп и вычесть 1поскольку мы не хотим считать уникальное значение в конце группы.

length(rle(x)$lengths) - 1

и

max(data.table::rleid(x)) - 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...