我正在独立的数据框中尝试分位数功能。
一个非常简单的例子来说明我的情况:
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)
任何帮助将不胜感激。
非常感谢您。
答案 0 :(得分:0)
对于列表中的每个元素,请执行以下操作:
计算分位数,就像您所做的那样:qx <- quantiles(x)
计算每个数据>=
的{{1}}个值中有多少个;这对应于除一个以外的所有四分位数
大小写-最大值(您会得到sum(qx >=
x[i])
,因为总和
是0)
将最大值的四分位数设置为四分位数 (“第四季度”)。
以下是一些虚假数据(数据帧列表):
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上)。