【问题标题】:In R how to exclude certain rows when calculating quantile()在R中计算分位数()时如何排除某些行
【发布时间】:2016-04-05 16:19:21
【问题描述】:

我有兴趣仅针对基于另一列的行子集计算数据框中列的quantile 函数。

例如,我有一个带有“Y”或“N”的new_user_indicator 列,并且想知道“Y”组的分位数。目前我在做

quantile(subset_df$limit_amount, .25)
subset_df <- subset(carddata, new_user_indicator == "Y")

有没有办法在一个命令中执行此操作,而不是创建一个子集数据框?

我查看了this,看看它是否有帮助,但无法破译部分代码。

谢谢

【问题讨论】:

  • quantile(subset(carddata, new_user_indicator == "Y")$limit_amount, .25) 怎么样?

标签: r subset


【解决方案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)

我假设你有另一个级别“N”,所以对于那个级别你可以做到

foo(carddata, "limit_amount", "new_user_indicator", "N", 0.25)

这里,out_varin_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 分位数。

【讨论】:

  • 酷!感谢您提供的详细信息。我将进行测试然后批准,但我感谢您提供的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 2020-07-17
相关资源
最近更新 更多