R 如何在组别内进行分层

R 如何在组别内进行分层,r,R,我想用变量对组_的类别运行分层函数,但该函数似乎忽略了组。我想原因是,一旦我使用pull函数,它就忽略了groupby变量。但是如果我不使用pull函数,stratify就不知道我想在变量areavariable上执行它。我怎样才能修好它?谢谢 stratify <- function(x, strata, breaks) { h <- hist(x, plot = FALSE, breaks = breaks) g <- length(h$counts) z &l

我想用变量对组_的类别运行分层函数,但该函数似乎忽略了组。我想原因是,一旦我使用pull函数,它就忽略了groupby变量。但是如果我不使用pull函数,stratify就不知道我想在变量areavariable上执行它。我怎样才能修好它?谢谢

stratify <- function(x, strata, breaks) {
  h <- hist(x, plot = FALSE, breaks = breaks)
  g <- length(h$counts)
  z <- data.frame(
    lower = rep(NA, g),
    upper = rep(NA, g),
    freq = h$counts,
    sqrtf = sqrt(h$counts),
    csqrtf = cumsum(sqrt(h$counts)),
    stratum = NA)
  k <- 1:(strata - 1) * max(z$csqrtf)/strata
  sizebound<-rep(NA, strata - 1)
  for (i in 1:g) {
    z$lower[i] <- h$breaks[i]
    z$upper[i] <- h$breaks[i + 1]
  }
  for (i in 1:(strata - 1)) {
    tmp <- which(abs(z$csqrtf - k[i]) == min(abs(z$csqrtf - k[i])))
    z$stratum[c(1:g) <= tmp & is.na(z$stratum)] <- i
    sizebound[i]<-z$upper[c(1:g) == tmp]
  }
  z$stratum[is.na(z$stratum)] <- strata
  out1 <-list(z, sizebound)
  return(out1)
}

strata_num <- 3 #USER INPUT
stratvar="areavariable" ##User Inputs

Stratum<-type_area2  %>%  filter(Outlier_for_area==0  ) %>% group_by(licence_type) %>% 
  pull(!!as.symbol(stratvar)) %>%  stratify(strata=strata_num, breaks=25)
Stratum

分层欢迎使用堆栈溢出。您可以将一个数据集作为代码的一部分共享,或者调整代码以使用R附带的数据集之一吗?不是答案,只是一句美学评论
pull(!!as.symbol(stratvar))
=
pull(stratvar)
也可以代替
max(z$csqrtf)
=
z$csqrtf[nrow(z)]
并始终使用矢量化赋值而不是循环,即:
下限=h$breaks[1:g],上限=h$breaks[1:(g+1)]
欢迎使用堆栈溢出。您可以将一个数据集作为代码的一部分共享,或者调整代码以使用R附带的数据集之一吗?不是答案,只是一句美学评论
pull(!!as.symbol(stratvar))
=
pull(stratvar)
也可以代替
max(z$csqrtf)
=
z$csqrtf[nrow(z)]
并始终使用矢量化赋值而不是循环,即:
lower=h$breaks[1:g],upper=h$breaks[1:g+1)]