分位数函数本身不允许您对子集进行操作。所以你确实需要一些方法来提取子集数据。
但是,不建议像您那样提取子集数据框。 quantile 接受向量,因此您只需对列进行子集化,而不是整个数据框。
quantile(with(carddata, limit_amount[new_user_indicator == "Y"]), 0.25)
with 函数帮助提取列,否则需要
quantile(carddatal$imit_amount[carddata$new_user_indicator == "Y"], 0.25)
更新
如果您要重复执行此操作,请编写一个函数(将函数名称 foo 更改为您喜欢的)
foo <- function(df, out_var, in_var, in_level, prob) {
quantile(df[[out_var]][df[[in_var]] == in_level], prob)
}
那么你可以这样做:
foo(carddata, "limit_amount", "new_user_indicator", "Y", 0.25)
我假设你有另一个级别“N”,所以对于那个级别你可以做到
foo(carddata, "limit_amount", "new_user_indicator", "N", 0.25)
这里,out_var、in_var 是输出变量和输入变量的列名(因此是字符串)。 in_level 是输入变量的级别。你知道prob 是干什么用的。
更强大的方式
如果您想要 所有 级别的输入变量为 0.25,那么使用我的函数仍然是愚蠢的。使用tapply
tapply(carddata$limit_amount, cardata$new_user_indicator, FUN = quantile, prob = 0.25)
tapply(x1, x2, FUN, ...) 将根据x2 应用quantile(x1, ...)。如果您在x2 中有 10 个级别,那么您将获得所有级别的 0.25 分位数。