【发布时间】:2013-03-21 04:24:10
【问题描述】:
我正在寻找一种更有效的方法来在 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
【问题讨论】:
-
什么?那是什么编程语言?你想做什么?请阅读常见问题解答:stackoverflow.com/faq。就目前而言,我严重怀疑我们能否有效地为您提供帮助。
-
是的,我现在知道这一点,因为用户在 34 分钟前将其编辑到问题中。 Fwiw 我仍然认为这个问题需要重新表述。
-
对不起,我正在尝试阅读常见问题解答,以便更容易理解。我现在发布了应该有帮助的可重现数据。感谢您的耐心等待!
-
@user2205744 现在好多了,但是您应该添加预期的结果。注意这里你使用随机数据而不修复
seed。