【发布时间】:2017-01-02 13:15:56
【问题描述】:
我的交易数据集包含几个变量,包括 ID 号、日期和交易区域(因素):
id<-as.integer(rep(c(1,2,3,4,5),times=20))
date<-rep(seq(as.Date("2011-07-01"),by="day", length.out=100))
category<-rep(as.factor(letters[seq( from = 1, to = 4 )]),times=25)
transactions<-data.frame(id, date, category)
head(transactions)
id date category
1 2011-07-01 a
2 2011-07-02 b
3 2011-07-03 c
4 2011-07-04 d
5 2011-07-05 a
1 2011-07-06 b
我希望在每个 ID 的基础上做的是确定因素出现的顺序,而不是重新计算已经出现的因素。
solution <- transactions %>%
group_by(id, date)%>%
mutate(category_order= (solution))
所以我可以得到:
head(transactions)
id date category category_order
1 2011-07-01 a 1
1 2011-07-06 b 2
1 2011-07-11 c 3
1 2011-07-16 d 4
1 2011-07-21 a 1
1 2011-07-26 b 2
对于每个 ID,如果一个类别重复,它必须具有相同的 order 值。在上面的例子中,a 总是第 1,b 总是第 2,等等。
我要做的是计算每个类别是第 1、第 2、第 3 等的次数,以获得 a 为第 1、b 为第 1、a 为第 2 等次数的频率分布:
head(transactions)
category category_ order category_order_count
a 1 5
a 2 3
a 3 5
a 4 4
b 1 5
b 2 2
这可能并不复杂,但我有一个心理障碍,因为它本质上涉及计算每个 ID 的订单而不重复因子级别,然后按 ID 汇总,最后按类别汇总。
【问题讨论】:
-
您能否举一个数据集的示例以及当因子“无序”时最终输出的样子?您当前的示例可以通过
as.numeric(transactions$category)解决,但我猜您的实际情况有些混淆了类别。 -
不
table(或as.data.frame.table,如果需要长格式)已经按照要求执行了吗?所以我想我真正的问题是“人们在寻求 dplyr/tidyr 解决方案之前不应该学习基础 R 吗?” -
我的实际数据集是机密的,但数据类型与上面的相同。也许问题不清楚 - 我想要做的是计算每个类别是第 1、第 2、第 3 等的次数,以获得 a 是第 1 次、b 是第 1 次、a 是第 2 次的次数的频率分布,等等。我会在上面编辑。
-
@42 不,它没有,这就是我发布问题的原因......