R 在tapply中改变论点?

R 在tapply中改变论点?,r,tapply,R,Tapply,我有几个组,比如a、B、C,我想根据这些组剪切另一个变量,即每个组对同一个变量有特定的中断 如果我必须计算各组的平均值,我会像这样使用tapply: tapply(mydata$var,mydata$group,mean) 不幸的是,我不知道如何为不同组的cut修改breaks=c(…)参数 tapply(mydata$var,mydata$group,cut) 有什么建议吗?我想用tapply来做,但是除了定制功能之外,任何其他解决方案都是合适的 编辑:一些小例子: test <-

我有几个组,比如a、B、C,我想
根据这些组剪切另一个变量,即每个组对同一个变量有特定的中断

如果我必须计算各组的平均值,我会像这样使用
tapply

tapply(mydata$var,mydata$group,mean)
不幸的是,我不知道如何为不同组的
cut
修改breaks=c(…)参数

tapply(mydata$var,mydata$group,cut)
有什么建议吗?我想用
tapply
来做,但是除了定制功能之外,任何其他解决方案都是合适的

编辑:一些小例子:

test <- data.frame(var=rnorm(100,0,1),
               group=c(rep("A",30),
                       rep("B",20),
                       rep("C",50)))
# for group A:
cut(test$var,breaks=c(-4,0,4))
# for group B
cut(test$var,breaks=c(-4,1,4))

test我要把我的读心术放在这里,试试看,你想要这样的东西:

dat <- data.frame(x = runif(100),grp = rep(letters[1:3],length.out = 100))

mapply(cut,split(dat$x,dat$grp),list(c(-Inf,0.5,Inf),
                                     c(-Inf,0.1,0.5,0.9,Inf),
                                     c(-Inf,0.25,0.5,0.75,Inf)))

dat实际上R在这里表现得相当聪明。我找到了一个解决方案,它确实按照我最初的想法工作。虽然它没有使用
apply
族。不知何故,R在这里创建整数而不是因子——这就是为什么在这个解决方案中,像Joran提到的那样,因子级别没有问题

dat <- data.frame(x = rnorm(100),grp = rep(letters[1:3],length.out = 100))
ifelse(dat$grp == "a",cut(dat$x,breaks=c(-Inf,0.1,0.2,Inf)),
       ifelse(dat$grp == "b",cut(dat$x,breaks=c(-Inf,0.1,1,Inf)),
              cut(dat$x,breaks=c(-Inf,0.9,2,Inf))) )

dat你能构造一个小例子吗?现在还不清楚您希望
group
如何确定/指导
cut()
断点的选择。此解决方案存在一个问题:我需要取消列出结果,因为我想再次将收到的因子添加到原始data.frame。通过取消列表,我只是混淆了分类。@ran2然后我真的很困惑;使用不同的断开方式切割每一块将产生不同层次的因素。如果你想把它们重新组合成一个因子,你只能有一组等级。我明白了。老实说,我没有考虑。也许我不能使用因子。我使用这些打断作为大小类,这些类取决于数据所属的组。My data.frame包含多个变量,这些变量在某些特定过程中聚合,并组合其变量。我需要为每个大小的类分别执行聚合。因此,如果仅将group和x变量按split分割,则没有多大帮助。。也许我的整个方法都不太好。还有更好的主意吗?+1可以让我更快地读心术,比我最近的例子还快。在第一眼看到它的时候,看起来我可能会添加acc-soonOk,我明白了。通过使用
as.integer
强制每个片段,然后使用
unlist
强制,您可能可以在
mapply
的输出上获得相同的结果。不过,很高兴你找到了答案。如果没有你的评论,我可能会尝试一天又一天。只是没有想到被限制在一组因素水平上——如果你知道的话,这是很明显的。谢谢!