我想使用 plyr 使用ecdf()
计算多个经验累积分布函数,然后将这些函数适当地应用于数据框中的条目。例如:
# Use the diamonds dataset in ggplot2
library(diamonds)
library(plyr)
# Calculate an ecdf for each combination of cut and color
all_ecdfs <- dlply(diamonds, c("cut", "color"), function(x) ecdf(x$carat))
# Make a dataset of specific diamonds, which I want to compare to the larger set
# My particular subset of diamonds
my_diamonds <- ddply(diamonds, c("cut", "color"), summarise,
my.carat=runif(n=1, min=0.5, max=1))
如果我手动执行此操作,它将如下所示:
# Use the ecdf for the first entry: cut=="Fair" and color=="D"
my_diamonds$percentile <- NA
my_diamonds$percentile[my_diamonds$cut=="Fair" & my_diamonds$color=="D"] <-
all_ecdfs[["Fair.D"]](my_diamonds$my.carat[my_diamonds$cut=="Fair" & my_diamonds$color=="D"])
似乎应该有一些方法可以使用ldply
或lapply
自动执行此操作,但我无法弄明白。
答案 0 :(得分:1)
以下是我如何使用dplyr
制作ecdf,并进行矢量化以获取数据的值。
#get ecdfs
library(dplyr)
z <- diamonds %>% group_by(cut, color) %>%
summarise(x = list(ecdf(carat)))
现在,您有一个数据框z
,其功能位于x
列的列表中。
在我们的数据上调用该函数。我们按行,获得匹配的剪切和颜色,然后在克拉上调用函数:
z$x[z$cut == my_diamonds$cut & z$color == my_diamonds$color][[1]](my_diamonds$my.carat)