데이터 프레임을 행렬로 변환하는 함수를 작성하고 싶습니다. 데이터 프레임은 이벤트 목록입니다. 각 행은 제품을 방문하거나 구매하는 사람에게 해당됩니다.용융 데이터 프레임을 행렬로 변환 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
원하는 출력 매트릭스에는 행이 사람으로 표시되고 열은 주로 표시됩니다. (사람, 주) 항목에서 나는 그 사람이 산다면 "사기"를 원하고, 그렇지 않다면 나는 그 사람이 방문하면 "방문"을 원한다. 그렇지 않으면 그 항목으로 "none"을 갖고 싶다. 보다 구체적으로, 원하는 출력은 다음과 같은 행렬이다 :
> my.mat
1 2 3
A "visit" "buy" "none"
B "visit" "none" "buy"
C "none" "none" "visit"
은 내가 최대로 캐스트를 수행 번호로 이벤트를 변환 한 다음 이벤트에 다시 번호를 변환해야합니다 아이디어를 가지고,하지만 난 이 모든 것을 함께 모으는 방법을 완전히 모르겠다.
unique(event)
as.numeric(factor(event))
unique(event)[as.numeric(factor(event)[1])]
첫 번째 줄은 여러 가지 이벤트가 당신이 할 방법을 보여줍니다
library(reshape2)
# there is a variety of ways to get the precedence you like
# I chose to just sort the strings
acast(my.df, person ~ week, function(x) {sort(as.character(x))[1]},
value.var = 'event', fill = 'none')
# 1 2 3
#A "visit" "buy" "none"
#B "visit" "none" "buy"
#C "none" "visit" "none"
에 대한 두 개의 값이 (B는, 3) ... 그걸 어떻게 해결 하시겠습니까입니까? (마지막 값을 얻은 것처럼 보입니다. 당신이하고 싶은 것입니까?) – Arun
중복이 없다면 (행 4를 제거하면) 직접 할 수 있습니다 :'acast (my.df [-4,] , person ~ week, value.var = "event", fill = "none")''reshape2' 패키지를 읽어 들여야합니다. – Arun
@Arun "방문"보다 "구매"우선 순위를주고 싶기 때문에 여러 값이있는 경우 가장 중요한 이벤트를 원합니다. –