Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用循环[R]为每个四分位数组分配中值_R_Loops_Group By_Dplyr - Fatal编程技术网

使用循环[R]为每个四分位数组分配中值

使用循环[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)) 我需要循环,所以

我需要将数值变量分类为四分位数,并使用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)) 
我需要循环,所以我编写了如下代码:

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))
}))

美丽的。非常感谢。