数据框的分位数

时间:2013-06-10 09:03:36

标签: r quantile

有一个data.frame(),我想要计算分位数的列:

tert <- c(0:3)/3
data <- dbGetQuery(dbCon, "SELECT * FROM tablename")
quans <- mapply(quantile, data, probs=tert, name=FALSE)

但结果只包含分位数返回列表的最后一个元素,而不是整个结果。我也收到警告longer argument not a multiple of length of shorter。如何修改我的代码才能使其正常工作?

PS:单独的功能就像魅力一样,所以我可以使用for循环:

quans <- quantile(a$fileName, probs=tert, name=FALSE)

PPS:指定probs

也有效
quans <- mapply(quantile, data, name=FALSE)

2 个答案:

答案 0 :(得分:5)

问题是mapply正在尝试将给定函数按顺序应用于指定参数的所有的每个元素。由于您只想为一个参数执行此操作,因此应使用lapply,而不是mapply

lapply(data, quantile, probs=tert, name=FALSE)

或者,您仍然可以使用mapply,但在MoreArgs参数中指定 not 的参数。

mapply(quantile, data, MoreArgs=list(probs=tert, name=FALSE))

答案 1 :(得分:0)

我终于找到了一个解决方法,我不喜欢但有点工作。也许有人可以告诉正确的方式:

q <- function(x) { quantile(x, probs=c(0:3)/3, names=FALSE) }
mapply(q, data)

有效,不知道差异在哪里。