【发布时间】:2018-05-31 19:19:21
【问题描述】:
我有一个像这样的数据框:
set.seed(567)
year= as.factor(c(rep("1998", 20), rep("1999", 16)))
lepsp= c(letters[seq(from = 1, to = 20 )], c('a','b','c'),letters[seq(from =8, to = 20 )])
freq= rpois(36, lambda=12)
df<-data.frame(year, lepsp, freq)
df<-
df %>%
group_by(year) %>%
mutate(rank = dense_rank(-freq))
我想通过year 对df 进行子集化,并创建一个名为quant 的新列,将相应的四分位数分配给子集中的每个freq 值。新列可以将分位数指定为probs = seq(0, 1, 0.05)。最重要的是,我以后可以根据分位数分配类别,例如,低于 25% 的任何东西都被归类为稀有。所以这些可以是广泛的四分位数名称,但是百分位数增量越小,我就越愿意将某些东西归类为罕见的r 或常见的c。
输出应该是这样的:
df<-data.frame(df, quant= c(75,50,25,50,50,25,75,50,25,75,75,100,50,100,100,50,25,25,75,25,75,50,50,75,75,25,25,50,50,50,25,75,75,25,75,50),
abucat= c("c", "r", "r","r","r", "r","c","r","r", "c", "c", "c", "r","c", "c","r" , "r", "r", "c", "r", "c","r","r","c","c","r",
"r","r","r","r","r","c","c","r","c","r"))
我试过了:
library(dplyr)
df<-
df %>%
group_by(year) %>%
mutate(quant = quantile(freq, probs= seq(0, 1, 0.25)))
【问题讨论】:
-
你如何计算你的量化值?
-
首先我每年对
sub1998和sub1999进行子集化,并使用quantile(sub1998$freq)和quantile(sub1999$freq)这样对于sub1998,如果freq小于6 它= 25%,小于11 但大于 6 = 50% 小于 12.25 但大于 11= 75% 并且大于 12.25 = 100% -
那么为什么第二个 1998 freq 13 在你的输出中有一个 quant 是 50?
-
拍摄,我忘了
set.seed()...我认为这是问题所在。我将编辑帖子,以便我的输出与原始 df 一致。 -
如果您无法从头开始构建数据框,也可以使用
dput发布您的数据框