好创建与购买频率信息的新data.frame更好的方法,这可能会遇到一个有点令人费解,但我会试着解释一下我的意思是:寻找从另一个data.frame
我有一个data.frame,告诉我不同类别的产品数量,这些产品在几年的每一天的不同会话中销售,并且还为每个类别中的每个产品提供True/False列,告诉我是否至少有一个该类型的产品在该会议期间出售。
这里有一个小例子:
Year Month Day Session Number Sold At Least One of X
2014 1 15 19876 10 True
2014 1 15 25698 10 False
2014 1 15 2156 2 True
2014 1 16 21578 0 False
2014 1 16 1123 12 False
2014 1 16 15469 25 True
2014 1 16 32654 0 False
2014 1 17 12589 8 True
2014 1 18 54269 4 True
2014 1 18 25136 14 True
所以,先观察,有此类别中10个项目销售,其中至少有一个是产品X有10个在类别出售下一届会议,但他们都不是产品X
这里有一个dput()上述表:显示时间是怎么%
structure(list(year = c(2014, 2014, 2014, 2014, 2014, 2014, 2014,
2014, 2014, 2014), month = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), day = c(15,
15, 15, 16, 16, 16, 16, 17, 18, 18), session = c(19876, 25698,
2156, 21578, 1123, 15469, 32654, 12589, 54269, 25136), numbsold = c(10,
10, 2, 0, 12, 25, 0, 8, 4, 14), min1x = structure(c(2L, 1L, 2L,
1L, 1L, 2L, 1L, 2L, 2L, 1L), .Label = c("False", "True"), class = "factor")), .Names = c("year",
"month", "day", "session", "numbsold", "min1x"), row.names = c(NA,
-10L), class = "data.frame")
所以,我做data.frames X至少是一年中某天在其分类中购买的产品之一。我希望得到以下的输出:
Date Frequency Sold
2014-01-15 0.6666667
2014-01-16 0.5000000
2014-01-17 1.0000000
2014-01-18 0.5000000
与我极其有限的R(我正在学习,但慢慢地)的知识,我知道这是可以做到像这样:
myout<-data.frame(c("1/15/2014","1/16/2014","1/17/2014","1/18/2014"),
c(sum(mydf$min1x=="True" & mydf$year==2014 & mydf$month==1 & mydf$day==15)
/sum(mydf$numbsold > 0 & mydf$year==2014 & mydf$month==1 & mydf$day == 15)
,sum(mydf$min1x=="True" & mydf$year==2014 & mydf$month==1 & mydf$day==16)
/sum(mydf$numbsold > 0 & mydf$year==2014 & mydf$month==1 & mydf$day == 16)
,sum(mydf$min1x=="True" & mydf$year==2014 & mydf$month==1 & mydf$day==17)
/sum(mydf$numbsold > 0 & mydf$year==2014 & mydf$month==1 & mydf$day == 17)
,sum(mydf$min1x=="True" & mydf$year==2014 & mydf$month==1 & mydf$day==18)
/sum(mydf$numbsold > 0 & mydf$year==2014 & mydf$month==1 & mydf$day == 18)))
names(myout)<-c("Date","Frequency Sold")
myout$Date<-as.Date(myout$Date, "%m/%d/%Y")
我基本上是在重复命令并迫使它每天一次构建data.frame。当然,在两年的时间里这样做,几十种不同的产品会变得非常快。
我可以使用什么来告诉R为特定产品构建数据框架,显示产品在数据集中找到的每个日期内至少在其类别中进行了一次购买的时间百分比?
谢谢!
'data.table'绝对是一种方法,但是,您的汇总操作不提供他想要的输出。 – stanekam
@iShouldUseAName:是的,我花了一秒钟才意识到(自修) –
@iShouldUseANameame和OP-你们两个的解决方案都很好。谢谢。他们只是两种做同样事情的方法(在R中看起来很常见)......即,有没有一个好处,你们都看到使用一个在另一个? – datahappy