在大量元素中显示哪个四分位数代表数据的函数

时间:2018-09-21 14:58:55

标签: r function quantile

我正在独立的数据框中尝试分位数功能。

一个非常简单的例子来说明我的情况:

获取四分位数

quantile(x <- rnorm(1001))

0%          25%          50%          75%         100% 
-2.930587810 -0.687108751  0.004405246  0.644589258  2.839597566 

#subdivide quantile results in 5 independent results (data frames) For example:

list2env(setNames(as.list(quantile(x <-   rnorm(1001))),paste0("Q",1:5)),.GlobalEnv)

现在,在新列中,我在四分位数数据结果旁边有一个分组为相应的四分位数Q0,Q1,Q2,Q3,Q4。

现在,我想将其应用于具有400多个元素的“大列表”(large_list),所以我想我需要一种不同的方法(函数)将其全局应用于400我列表中的元素。

在这里,我需要社区的帮助,这是我的方法:

#Read all elements of the list in the environment,create a new column to be named, 
# Elementname.Quartilenumber that contains which 
# Q (0,1,2,3,4) number the data belongs to.

Qnumber <- function(x) {
element_name <- stringi::stri_extract(names(x)[1], regex = "^[A-Z]+")
element_name <- paste0(element_name, ".Quartilenumber")
column_names <- c(names(x), stock_name)
x$quartile <- quantile(large_list$.)
x <- setNames(x, column_names)
return(x) 

任何帮助将不胜感激。

非常感谢您。

1 个答案:

答案 0 :(得分:0)

对于列表中的每个元素,请执行以下操作:

  1. 计算分位数,就像您所做的那样:qx <- quantiles(x)

  2. 计算每个数据>=的{​​{1}}个值中有多少个;这对应于除一个以外的所有四分位数 大小写-最大值(您会得到sum(qx >= x[i]),因为总和 是0)

  3. 将最大值的四分位数设置为四分位数 (“第四季度”)。

以下是一些虚假数据(数据帧列表):

NA

单步执行data.frames列表并添加四分位数列。

list.1 <- list()
for (i in 1:5) {
    list.1[[i]] <- data.frame('elem_data'=rnorm(10))
}

我用1000个数据帧的列表进行了尝试,每个数据帧包含1000个数据元素,这花了大约2.5秒的时间(在2013年中的MacBook Air上)。