首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改tapply中的参数?

更改tapply中的参数?
EN

Stack Overflow用户
提问于 2011-12-23 23:11:16
回答 2查看 246关注 0票数 1

我有几个组,比方说A,B,C,我想根据这些组cut另一个变量,也就是说,每个组对同一个变量都有特定的中断。

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

代码语言:javascript
复制
tapply(mydata$var,mydata$group,mean)

不幸的是,我不知道如何通过更改breaks=c(...)来修复cut的这个问题不同组的参数。

代码语言:javascript
复制
tapply(mydata$var,mydata$group,cut)

有什么建议吗?我想用tapply来做这件事,但是除了定制函数之外,任何其他的解决方案都是合适的。

编辑:一些小示例:

代码语言:javascript
复制
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))

以此类推。

EN

回答 2

Stack Overflow用户

发布于 2011-12-23 23:28:34

我要把我的读心帽放在这里,试一试你想要这样的东西:

代码语言:javascript
复制
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)))

因此,这只是通过grp拆分x,并对每个片段应用cut,对每个片段使用不同的分隔符。

票数 2
EN

Stack Overflow用户

发布于 2011-12-24 00:07:42

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

代码语言:javascript
复制
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))) )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8617557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档