整个数据帧的分位数结果

时间:2017-03-30 10:41:17

标签: r quantile

我有一个相当大的数据集,包含大约100个变量 100万观察。数据集包含数字和分类变量。 我想计算所有数值变量的分位数,所以当我尝试以下时: quantile(dat1, c(.10, .30, .5, .75, .9, na.rm = TRUE)

我在R中输入错误"二元运算符的非数字参数"

所以有人可以建议我适当的代码吗?感谢您的所有帮助和感谢

1 个答案:

答案 0 :(得分:1)

所有数字列的分位数

# sample data with numeric and character class values 
df <- data.frame(a = 1:5, b= 1:5, c = letters[1:5])
col_numeric <- which( sapply(df, is.numeric ) )   # get numeric column indices
quantile( x = unlist( df[,  col_numeric] ), 
          c(.10, .30, .5, .75, .9),
          na.rm = TRUE )

# 10% 30% 50% 75% 90% 
#  1   2   3   4   5 

个别数字列的分位数

sapply( col_numeric, function( y ) {
  quantile( x = unlist( df[,  y ] ), 
            c(.10, .30, .5, .75, .9),
            na.rm = TRUE )
})

#       a   b
# 10% 1.4 1.4
# 30% 2.2 2.2
# 50% 3.0 3.0
# 75% 4.0 4.0
# 90% 4.6 4.6

由于您的实际数据很大,您可以使用data.table库来提高效率。

library('data.table')
setDT(df)[, lapply( .SD, quantile, probs = c(.10, .30, .5, .75, .9), na.rm = TRUE ), .SDcols = col_numeric ]