这是一个相当基本的问题,但在各种论坛上都没有看到好的答案。 说我有一个简单的向量
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 任何帮助表示赞赏。
答案 0 :(得分:6)
你得到两次名字,因为你给了data.frame
两次名字 - 先作为一个矢量,然后作为命名矢量的一部分。您收到level
,因为默认情况下,stringsAsFactors
为TRUE
。
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%"
答案 1 :(得分:5)
名称只是概率所以
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