我对编程很陌生,希望能对此有所帮助。我有一个数据框架,其中包含产品名称和销售日期。对于每一种产品,我都需要看到周一、周二、周三等地出售的分数。
请跟着这个复制我的数据:
Product=c("A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","C","C","C")
Day=c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Monday","Tuesday","Wednesday","Saturday","Sunday" ,"Monday")
df=data.frame(cbind(Product,Day))我尝试了以下几点:
data.frame(prop.table(with(df,table(Product,Day))))
df.wide=reshape(data.frame(prop.table(with(df,table(Product,Day)))),
timevar="Day",
idvar="Product",
direction="wide")这给了我
Product Freq.Friday Freq.Monday Freq.Saturday Freq.Sunday Freq.Thursday Freq.Tuesday Freq.Wednesday
A 0.1111111 0.11111111 0.11111111 0.00000000 0.1111111 0.11111111 0.11111111
B 0.0000000 0.05555556 0.00000000 0.00000000 0.0000000 0.05555556 0.05555556
C 0.0000000 0.05555556 0.05555556 0.05555556 0.0000000 0.00000000 0.00000000我可以求和列2-8,得到总比例的A,B,C销售,但我如何获得比例的A,B,C在一周的一天?
谢谢!
发布于 2015-03-19 23:15:01
这是一个非常简单的table操作,当它与prop.table(...,margin=)相结合时。margin=参数允许计算行、列或整个表(默认) prop.table(...,1)做行的比例;2做列,3做地层等等。
另外,不要使用data.frame,而是使用as.data.frame.matrix来避免重塑需求:
as.data.frame.matrix(prop.table(with(df,table(Product,Day)),1))
# Friday Monday Saturday Sunday Thursday Tuesday Wednesday
#A 0.1666667 0.1666667 0.1666667 0.0000000 0.1666667 0.1666667 0.1666667
#B 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000 0.3333333 0.3333333
#C 0.0000000 0.3333333 0.3333333 0.3333333 0.0000000 0.0000000 0.0000000
as.data.frame.matrix(prop.table(with(df,table(Product,Day)),2))
# Friday Monday Saturday Sunday Thursday Tuesday Wednesday
#A 1 0.50 0.6666667 0 1 0.6666667 0.6666667
#B 0 0.25 0.0000000 0 0 0.3333333 0.3333333
#C 0 0.25 0.3333333 1 0 0.0000000 0.0000000您还可以考虑在适当的周日-周六订单中,将day与factor与levels一起使用。
发布于 2015-03-19 23:04:55
试试这个:
library(reshape2)
library(plyr)
ddply(dcast(df, Product ~ Day),1,function(u) data.frame(u[1], u[-1]/sum(u[-1])))
# Product Friday Monday Saturday Sunday Thursday Tuesday Wednesday
#1 A 0.1666667 0.1666667 0.1666667 0.0000000 0.1666667 0.1666667 0.1666667
#2 B 0.0000000 0.3333333 0.0000000 0.0000000 0.0000000 0.3333333 0.3333333
#3 C 0.0000000 0.3333333 0.3333333 0.3333333 0.0000000 0.0000000 0.0000000https://stackoverflow.com/questions/29156320
复制相似问题