Как построить счетчик заполненной матрицы в R - PullRequest
0 голосов
/ 15 мая 2018

Я работаю над аналитическим проектом с использованием R. Как часть модуля подготовки данных, я застрял с определенной задачей. У меня есть категориальный столбец и переменная ответа, как показано: Pic1.

Мне нужно построить последовательные заливки, как показано ниже. Это должно быть построено как показано: Pic2

Логика следующая: Рассмотрим шаг = 3. Из фактических данных рассмотрим первые 3 строки a, b, c, и столбец yes / no имеет одно «Да». Таким образом, соответствующие значения a, b, c, d, e, f в результирующей матрице заполняются как 1,1,1,0,0,0 с помощью Да. Следующий шаг имеет b, c, b, поэтому результирующая матрица заполняется как 0,2,1,0,0,0 с помощью Да. Этот процесс следует повторять до последней последовательности в исходных данных.

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

Заранее благодарю.

1 Ответ

0 голосов
/ 15 мая 2018

Используйте rollapply из зоопарка с table и any:

library(zoo)

step <- 3

data.frame(
     rollapply(DF$Features, step, table), 
     "Yes/No" = ifelse(rollapply(DF$"Yes/No" == "Yes", step, any), "Yes", "No"),
       check.names = FALSE
)

, дающим:

  a b c d e f Yes/No
1 1 1 1 0 0 0    Yes
2 0 2 1 0 0 0    Yes
3 0 1 1 1 0 0     No
4 0 1 0 1 1 0    Yes
5 1 0 0 1 1 0    Yes
6 1 0 0 0 1 1    Yes

Примечание

Вход DFв воспроизводимом виде:

DF <- data.frame(Features = c("a", "b", "c", "b", "d", "e", "a", "f"),
 "Yes/No" = c("No", "Yes", "No", "No", "No", "Yes", "No", "No"), 
  check.names = FALSE)
...