如何在tidyverse管道风格代码中为IQ变量添加cut分组?
解决tidyverse管道中对IQ分组生成频率表的问题
问题背景
需要保持tidyverse管道风格的代码,以便后续格式化表格。现有代码生成的IQ频率表因IQ取值过多而过宽,希望通过cut()函数结合指定breaks对IQ进行分组,已掌握Base R实现方式,但无法将分组逻辑融入管道代码中。
原管道代码:
datafile %>% select(Var1, IQ) %>% with(.,addmargins(table(.))) %>% kbl(caption = "Var1 with IQ") %>% kable_classic()
Base R实现分组的代码:
table(datafile$Var1,cut(datafile$IQ,breaks=c(70,85,100,115,130,145)))
解决方案
提供两种符合tidyverse管道风格的实现方式:
方式一:先通过mutate()生成分组变量
先将IQ转换为分组后的新变量,再生成带边际汇总的频率表:
datafile %>% select(Var1, IQ) %>% # 对IQ进行分组,生成新变量IQ_group mutate(IQ_group = cut(IQ, breaks = c(70, 85, 100, 115, 130, 145))) %>% select(Var1, IQ_group) %>% with(., addmargins(table(.))) %>% kbl(caption = "Var1 with grouped IQ") %>% kable_classic()
方式二:直接在table()中对IQ做分组
无需生成新变量,直接在table()函数内对IQ应用cut():
datafile %>% select(Var1, IQ) %>% with(., addmargins(table(Var1, cut(IQ, breaks = c(70, 85, 100, 115, 130, 145))))) %>% kbl(caption = "Var1 with grouped IQ") %>% kable_classic()
两种方式均能保持管道的整洁性,同时实现IQ的分组,避免表格过宽的问题。
内容的提问来源于stack exchange,提问作者StephanieK
相关产品推荐
相关产品推荐

