我正在寻找一种更有效的方法来在 R 中创建子集。使用行 = 产品和列 = 时间的数据集,我想找到商品在第 1 周开始销售的那些行(产品),然后进行一个子集。然后对第 2 周做同样的事情,等等。
set.seed(4); d <- data.frame(
product = seq(1:10),
week1= sample(0:1,10,replace=TRUE),
week2= sample(0:3,10,replace=TRUE),
week3=sample(0:5,10,replace=TRUE),
week4= sample(0:5,10,replace=TRUE),speed=sample(100:200,10),quality=sample(20:50,10)
)
完整的数据框是 d。所以我需要知道两件事来找到所有的子集:1)前几周的销售额都是 ==0 ,然后 2)本周的销售额不为零。
任何子集都不应重叠,因为它们是按照产品首次进入市场时对产品进行分组的。
我找到了一个穷人的方法来做到这一点,但我知道必须有更好的方法!
低效的方式:
subset3<-d[d$week3 >0 & d$week2==0 & d$week1==0 ,]
subset4<-d[d$week4 >0 & d$week3 ==0 & d$week2==0 & d$week1==0,]
效率稍高,但仍然很差
subset3<-d[d$week3 >0 & d$week2+d$week1==0 ,]
subset4<-d[d$week4 >0 & d$week3 + d$week2 + d$week1==0,]
感觉我应该能够做这样的事情,但它不起作用:
subset4<-d[d$week4 >0 & sum(d$week1:d$week3) ==0, ]
我不认为 ddply 或 apply 会在这里工作,但也许我错了?我需要的结果是 d 的子集,所有列,如下所示:
子集3=
product week1 week2 week3 week4 speed quality
2 0 0 5 1 124 42
3 0 0 3 5 155 45