R:将列添加到data.frame以拆分为低、中、高范围

R:将列添加到data.frame以拆分为低、中、高范围,r,dataframe,tidyverse,data-analysis,R,Dataframe,Tidyverse,Data Analysis,我有一个星系及其距离的数据框z: 我想添加一个新的列,根据星系所处的分位数,将z描述为“低”、“中”或“高”: summary(z) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's -0.002643 1.177832 1.692103 1.740606 2.260000 7.023917 4 我可以用 lowz <- sdss16 %>% filter(z &

我有一个星系及其距离的数据框z:

我想添加一个新的列,根据星系所处的分位数,将z描述为“低”、“中”或“高”:

summary(z)

     Min.   1st Qu.    Median      Mean   3rd Qu.      Max.      NA's 
-0.002643  1.177832  1.692103  1.740606  2.260000  7.023917         4
我可以用

lowz <- sdss16 %>% filter(z < quantile(z, 0.25))
midz <- sdss16 %>% filter(z >= quantile(z, 0.25) & z < quantile(z, 0.75))
hiz <-  sdss16 %>% filter(z >= quantile(z, 0.75))

所以我的问题是,我如何才能添加一个基于四分位数的新列,如前所述?

也许这会起作用

library(tidyverse)
sdss16 %>% 
  mutate(z_category = case_when(z < quantile(z, 0.25) ~ "Low",
                                  z >= quantile(z, 0.25) & z <= quantile(z, 0.75) ~ "Medium",
                                  z > quantile(z, 0.75) ~ "High"))

也许这会奏效

library(tidyverse)
sdss16 %>% 
  mutate(z_category = case_when(z < quantile(z, 0.25) ~ "Low",
                                  z >= quantile(z, 0.25) & z <= quantile(z, 0.75) ~ "Medium",
                                  z > quantile(z, 0.75) ~ "High"))
然后,如果需要将它们拆分为不同的数据帧,可以使用拆分:

然后,如果需要将它们拆分为不同的数据帧,可以使用拆分:


什么是四分位数??是哪个包裹寄来的?。我只知道分位数和分位数,1会给你z的最大值,我们知道,除了最大值,其他每个值都是z,都会满足条件,我猜可能有一个函数名为zquartile,它会满足我的要求。显然,没有。一个函数能做什么?我在想,quartilez,1会返回z列的第一个四分位数。我想我可以写一个函数来做这个,但是tidyverse中有吗?你是说分位数吗?我还是很困惑。我不知道什么是四分位数,但我知道什么是分位数什么是四分位数??是哪个包裹寄来的?。我只知道分位数和分位数,1会给你z的最大值,我们知道,除了最大值,其他每个值都是z,都会满足条件,我猜可能有一个函数名为zquartile,它会满足我的要求。显然,没有。一个函数能做什么?我在想,quartilez,1会返回z列的第一个四分位数。我想我可以写一个函数来做这个,但是tidyverse中有吗?你是说分位数吗?我还是很困惑。我不知道什么是四分位数,但我知道什么是分位数是完美的!我不知道什么时候发生的。谢谢,太好了!我不知道什么时候发生的。谢谢。cutz,quantile0,.25,.75,1,clow,中,高,include.lowest=TRUE应该可以+1 stillcutz,quantile0,.25,.75,1,clow,Medium,High,include.lowest=TRUE应该可以+1仍然
library(dplyr)

df %>% 
  mutate(cat = cut(z, 
                   c(-Inf, quantile(z, c(.25, .75)), Inf), 
                   labels = c("Low", "Medium", "High")))
split(df, df$cat)