R将ecdf应用于每一列

时间:2013-11-28 09:16:38

标签: r apply ecdf

我正在尝试在数据框中获取每列c的ecdf(),然后将列的行r提供到该列的ecdf(c)以返回相应的值每个小区ecdf(c)(r)。以下功能有效。

getecdf <- function(data){
  # initialise result data
  result <- data.frame(matrix(NA, nrow = nrow(data), ncol = ncol(data)));
  rownames(result) <- rownames(data); colnames(result) <- colnames(data);
  for (c in 1:ncol(data)){
    col <- data[,c];
    cum <- ecdf(col)
    for (r in 1: length(col)){
      result[r,c] <- cum(col[r])
    }
  }
  return <- result  
}
cum_matrix <- getecdf(iris)

但是,我99.5%肯定有一个包含apply的单行代码来执行此操作。 我试过了:

apply(iris, 2, function(x) for (r in x){ ecdf(x)(r)})

但不知道如何存储结果。

任何帮助?

1 个答案:

答案 0 :(得分:3)

ecdf是矢量化的,您可以使用

apply(iris[, 1:4], 2, function(c) ecdf(c)(c))