首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对分组变量应用ifelse

对分组变量应用ifelse
EN

Stack Overflow用户
提问于 2015-08-21 05:19:34
回答 1查看 483关注 0票数 1

我有包含指数和季节的数据,并希望对这些数据进行离散化。我创建了一些假数据用于演示:

代码语言:javascript
复制
data_frame <- data.frame(index=c(10,233.2,12,44,56,232,1.4,43,76,89,20.3,23), season=c('Fall','Winter','Fall','Summer','Winter','Spring','Spring','Summer','Winter','Spring','Summer','Fall'))
data_frame
   index season
1   10.0   Fall
2  233.2 Winter
3   12.0   Fall
4   44.0 Summer
5   56.0 Winter
6  232.0 Spring
7    1.4 Spring
8   43.0 Summer
9   76.0 Winter
10  89.0 Spring
11  20.3 Summer
12  23.0   Fall

因为在我的原始数据中,每个季节的分布是不同的,所以我想按季节变量对指数分组进行离散化。我对数据进行离散化,将组中大于75%的值指定为1,将低于75%的值指定为0。

我想要以下输出:

代码语言:javascript
复制
   index season  disc
1   10.0   Fall  0
2  233.2 Winter  1
3   12.0   Fall  0
4   44.0 Summer  1
5   56.0 Winter  0
6  232.0 Spring  1
7    1.4 Spring  0
8   43.0 Summer  0
9   76.0 Winter  0
10  89.0 Spring  0
11  20.3 Summer  0
12  23.0   Fall  1

我知道如何找到结果,但不是以我需要的格式。我使用tapply函数对变量进行离散化:

代码语言:javascript
复制
tapply(data_frame$index, data_frame$season, function(x) ifelse(x>quantile(x,0.75),1,0))
$Fall
[1] 0 0 1

$Spring
[1] 1 0 0

$Summer
[1] 1 0 0

$Winter
[1] 1 0 0

我如何产生我需要的输出?

EN

回答 1

Stack Overflow用户

发布于 2015-08-21 05:22:16

您可以使用dplyr

代码语言:javascript
复制
library(dplyr)
data_frame %>% group_by(season) %>%
               mutate(disc = +(percent_rank(index) > 0.75))

   index season disc
1   10.0   Fall    0
2  233.2 Winter    1
3   12.0   Fall    0
4   44.0 Summer    1
5   56.0 Winter    0
6  232.0 Spring    1
7    1.4 Spring    0
8   43.0 Summer    0
9   76.0 Winter    0
10  89.0 Spring    0
11  20.3 Summer    0
12  23.0   Fall    1

使用+进行编辑,将TRUE FALSE转换为numberic

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32128585

复制
相关文章

相似问题

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