【发布时间】:2014-03-24 18:00:33
【问题描述】:
好的,这可能有点令人费解,但我会尝试解释我的意思:
我有一个 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.frame,显示该产品在数据集中找到的每个日期在其类别中至少完成一次购买的时间百分比?
谢谢!
【问题讨论】: