Я хочу присвоить vector
элементам matrix
. В моем примере у меня есть 10 видов фруктов, доступных для покупки, в my.fruit
. Образец из пяти кусочков фруктов приобретается в последовательности, показанной в sequence.of.purchased.item
. Я хочу создать matrix
, содержащий последовательность, в которой был куплен фрукт, как показано в desired.result
.
Вот несколько длинное описание того, как desired.result
построен. Вектор my.fruit
по существу является именами строк matrix
desired.result
. Первая купленная слива была первым купленным фруктом. Порядковый номер 1
помещается в первый столбец пятой строки, строка представляет сливы. Вторая купленная слива была третьим купленным фруктом. Порядковый номер 3
помещен во второй столбец строки сливы. Первое купленное яблоко было вторым купленным фруктом. Итак, число 2 помещено в первый столбец первого ряда, представляющего яблоки. Четвертый кусок купленного фрукта был апельсином. Таким образом, 4 помещается в первый столбец второго ряда, ряд, представляющий апельсины.
Десятый ряд представляет оливки, но оливки не были куплены. Точно так же не покупались вишня, персики, абрикосы, груши, грейпфрут или инжир. Таким образом, все их строки равны нулю в desired.result
.
my.fruit <- c('apple', 'orange', 'cherry', 'peach', 'plum',
'apricot', 'pear', 'grapefruit', 'fig', 'olive')
sequence.of.purchased.item <- c('plum', 'apple', 'plum', 'orange', 'plum')
desired.result <- matrix(c(
2, 0, 0,
4, 0, 0,
0, 0, 0,
0, 0, 0,
1, 3, 5,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0), ncol = 3, byrow = TRUE)
Я могу получить индексы строк и столбцов для каждого кусочка купленного фрукта, используя:
purchase.order.row <- match(sequence.of.purchased.item, my.fruit)
purchase.order.row
#[1] 5 1 5 2 5
purchase.order.col <- sapply(1:length(sequence.of.purchased.item),
function(i) {sum(sequence.of.purchased.item[i] == sequence.of.purchased.item[1:i])})
purchase.order.col
#[1] 1 1 2 1 3
Здесь я пытаюсь присвоить порядковый номер каждого купленного фрукта выводу matrix
, используя sapply
:
my.output <- matrix(0, ncol = 3, nrow = 10)
sapply(1:5, function(x) my.output[purchase.order.row[x],
purchase.order.col[x]] = x)
Однако оператор sapply
не возвращает желаемый результат.
my.output
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
[4,] 0 0 0
[5,] 0 0 0
[6,] 0 0 0
[7,] 0 0 0
[8,] 0 0 0
[9,] 0 0 0
[10,] 0 0 0