【发布时间】:2013-08-22 20:33:13
【问题描述】:
我想编写一个将数据框转换为矩阵的函数。数据框是事件列表。每行对应一个访问或购买产品的人。
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
所需的输出矩阵将行作为人,将列作为周。在 (person, week) 条目中,如果有人购买,我希望有“购买”,如果没有,如果有人访问,我希望有“访问”,否则我希望有“无”作为条目。更具体地说,所需的输出是以下矩阵:
> my.mat
1 2 3
A "visit" "buy" "none"
B "visit" "none" "buy"
C "none" "none" "visit"
我的想法是我应该将事件转换为数字,使用最大值进行强制转换,然后将数字转换回事件,但我不完全确定如何将这些放在一起。
【问题讨论】:
-
(B,3) 有两个值。你想如何解决这个问题? (你好像取了最后一个值。。这是你想做的吗?)
-
如果没有重复(通过删除第4行),您可以直接通过加载
reshape2包来执行:acast(my.df[-4, ], person ~ week, value.var="event", fill="none")。 -
@Arun 我想给“购买”优先于“访问”,所以如果有多个值我想采取最重要的事件。
标签: r matrix dataframe reshape2