Я хотел бы написать функцию, которая преобразует фрейм данных в матрицу. Кадр данных представляет собой список событий. Каждой строке соответствует человек, посещающий или покупающий продукт.Преобразование кадра расплавленной информации в матрицу в R
my.df <- data.frame(person = c('A', 'A', 'B', 'B', 'B', 'C'),
week = c(1, 2, 1, 3, 3, 2),
event = c('visit', 'buy', 'visit', 'visit', 'buy', 'visit'))
> my.df
person week event
1 A 1 visit
2 A 2 buy
3 B 1 visit
4 B 3 visit
5 B 3 buy
6 C 2 visit
Желаемая матрица вывода имеет строки как люди, а столбцы - недели. В записи (человек, неделя) я хочу «купить», если человек купил, а если нет, я хочу «посещать», если посетитель посетил, иначе я хочу иметь «нет» в качестве записи. Более конкретно, желаемый результат является следующей матрицей:
> my.mat
1 2 3
A "visit" "buy" "none"
B "visit" "none" "buy"
C "none" "none" "visit"
У меня есть идея, что я должен преобразовать события в число, сделать бросок с максимальным, а затем преобразовать число обратно в событие, но я я не совсем уверен, как это все вместе.
Существует два значения для (B, 3) .. Как вы хотите это решить? (Вы, кажется, взяли последнее значение .. Это то, что вы хотите сделать?) – Arun
Если дубликатов нет (удалив строку 4), вы можете напрямую: 'acast (my.df [-4,] , person ~ week, value.var = "event", fill = "none") 'путем загрузки пакета' reshape2'. – Arun
@Arun Я хочу дать «покупать» приоритет над «посещением», поэтому, если есть несколько значений, я хочу принять самое важное событие. –