我有包含指数和季节的数据,并希望对这些数据进行离散化。我创建了一些假数据用于演示:
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。
我想要以下输出:
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函数对变量进行离散化:
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我如何产生我需要的输出?
发布于 2015-08-21 05:22:16
您可以使用dplyr
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
https://stackoverflow.com/questions/32128585
复制相似问题