我有兴趣根据另一列计算数据框中列的quantile
函数,仅用于行的子集。
例如,我有一个new_user_indicator
列,其中包含" Y"或" N",并想知道" Y"的分位数。组。目前我在做
quantile(subset_df$limit_amount, .25)
subset_df <- subset(carddata, new_user_indicator == "Y")
有没有办法在一个命令中执行此操作而不是创建子集化数据框?
我查看了this,看看它是否有用,但无法解读部分代码。
由于
答案 0 :(得分:1)
分位数函数本身不允许您对子集进行操作。所以你确实需要一些方法来提取子集数据。
但是,不建议像您一样提取子集数据框。 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)
我假设你有另一个级别&#34; N&#34;,所以对于那个级别你可以做
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, ...)
将根据quantile(x1, ...)
应用x2
。如果你在x2
中有10个等级,那么你得到所有这些等级的0.25分位数。