使用循环[R]为每个四分位数组分配中值
我需要将数值变量分类为四分位数,并使用loop为四分位数组分配中值(因为我的原始数据集有很多变量) 我打算对许多变量进行以下操作:使用循环[R]为每个四分位数组分配中值,r,loops,group-by,dplyr,R,Loops,Group By,Dplyr,我需要将数值变量分类为四分位数,并使用loop为四分位数组分配中值(因为我的原始数据集有很多变量) 我打算对许多变量进行以下操作: data(iris) iris%>%mutate(Sepal.Lengthq=as.factor(ntile(Sepal.Length,4)))%>% group_by(Sepal.Lengthq)%>% mutate(Sepal.Lengthq_median=median(Sepal.Length,na.rm=T)) 我需要循环,所以
data(iris)
iris%>%mutate(Sepal.Lengthq=as.factor(ntile(Sepal.Length,4)))%>%
group_by(Sepal.Lengthq)%>%
mutate(Sepal.Lengthq_median=median(Sepal.Length,na.rm=T))
我需要循环,所以我编写了如下代码:
quartilization=c("Sepal.Length","Sepal.Width")
for (i in seq_along(quartilization)){
iris2=iris %>%
mutate(!!str_c(quartilization[i],"q"):=ntile(.[[quartilization[i]]],4)) %>%
group_by_at(vars(one_of(!!str_c(quartilization[i],"q")))) %>%
mutate(!!str_c(quartilization[i],"qn"):=median(.[[quartilization[i]]],na.rm=T)) %>%
ungroup()
}
但是,1)它不返回“萼片长度Qn”,2)“萼片宽度Qn”在样本上是相同的值
我觉得中值函数的语法是错误的,但无法修复它
如果有人能给我一些建议,我将不胜感激。谢谢。当您使用
时,您引用的是整个数据帧,因此您在所有年份都会得到相同的值。使用中值中的.data
获取组中的数据
对于
循环,我使用map\u dfc
而不是,因为它更简单、更短。我还使用transmute
而不是mutate
,因为mutate
每次都返回所有列,而transmute
只返回可以绑定到原始数据帧的更改列
library(dplyr)
library(purrr)
library(stringr)
quartilization=c("Sepal.Length","Sepal.Width")
bind_cols(iris, map_dfc(quartilization, ~{
iris %>%
group_by(!!str_c(.x,"q") := ntile(.[[.x]],4)) %>%
transmute(!!str_c(.x,"qn"):= median(.data[[.x]],na.rm=TRUE))
}))
美丽的。非常感谢。