簡體   English   中英

將分位數輸出到數據幀

[英]Output of quantile to a data frame

這是一個相當基本的問題,但在各種論壇上都沒有看到很好的答案。 說我有一個簡單的向量

x = runif(10,1,4)
> x
[1] 3.292108 1.388526 2.774949 3.005725 3.904919 1.322561 2.660862 1.400743
[9] 2.252095 3.567267
> 

接下來我計算一些分位數,

> z = quantile(x,c(0.1,0.8))
> z
 10%      80% 
1.381929 3.347140 
> 

我需要這個輸出作為數據幀。 所以我嘗試了以下內容

> y = data.frame(id = names(z),values=z)
> y
 id   values
10% 10% 1.381929
80% 80% 3.347140

我看到重復了“%”列。 當我嘗試時

> y$id[1]
[1] 10%
Levels: 10% 80%

而我期待它只是“10%”或0.1任何幫助贊賞。

你得到兩次名稱,因為你給data.frame兩次名字 - 首先作為一個向量,然后作為命名向量的一部分。 您正在獲得level s,因為默認情況下, stringsAsFactorsTRUE

set.seed(1)
x <- runif(10,1,4)
z <- quantile(x, c(0.1, 0.8))
y <- data.frame(id=names(z), values=unname(z), stringsAsFactors=FALSE)
y
#   id   values
#1 10% 1.563077
#2 80% 3.701060

y$id[1]
#[1] "10%"

名字只是概率所以

y <- data.frame(id = c(0.1, 0.8), values = z) 

會工作。

所以將它包裝在一個返回data.frame的函數中

quantile_df <- function(x, probs, na.rm =F, names = F, type = 7, ...){
  z <- quantile(x, probs, na.rm, names, type)
  return(data.frame(id = probs, values = z))
}

quantile_df(x, probs = c(0.1, 0.8))
##    id   values
## 1 0.1 1.343383
## 2 0.8 2.639341

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM