Построение информационного кадра с расположением элементов в порядке появления - PullRequest
0 голосов
/ 28 мая 2018

Может ли кто-нибудь помочь в построении матрицы, которая содержит последовательные позиции с использованием R, как показано ниже:

Исходные данные:

sampledata <- data.frame("column1" = c("a","b","c","d","e","a","b","e"),
    "column2" = c(1,0,0,1,0,0,0,0))

Результирующая матрица:

Result

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

Может кто-нибудь, пожалуйста, помогите мне в выполнении вышеуказанного.

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

1 Ответ

0 голосов
/ 28 мая 2018
sampledata <- data.frame("column1" = c("a","b","c","d","e","a","b","e"),
                         "column2" = c(1,0,0,1,0,0,0,0))

step = 3
v <- c("a","b","c","d","e","f")

# allocate memory for the resulting matrix
result <- matrix(0, 
                 nrow = nrow(sampledata) - step + 1, 
                 ncol = length(v) + 1)
colnames(result) <- c(v, "Yes.No")

for (i in 1 : (nrow(sampledata) - step + 1 )){

  # find position of every letter in the vector v within subset of column1
  pos <- match( v, sampledata$column1[i : (i + step - 1)])

  # change NAs to 0
  pos[is.na(pos)] <- 0

  # fill the row with the values in pos and sum of values in column 2
  result[i,] <- c(pos, sum(sampledata$column2[i : (i + step - 1)]))
}


result
#     a b c d e f Yes.No
#[1,] 1 2 3 0 0 0      1
#[2,] 0 1 2 3 0 0      1
#[3,] 0 0 1 2 3 0      1
#[4,] 3 0 0 1 2 0      1
#[5,] 2 3 0 0 1 0      0
#[6,] 1 2 0 0 3 0      0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...