【问题标题】:Group rows in data.frame and find quantile [duplicate]在data.frame中对行进行分组并找到分位数[重复]
【发布时间】:2019-09-18 18:37:57
【问题描述】:

我有以下数据:

set.seed(789)
df_1 = data.frame(a = 22, b = 24, c = rnorm(10))
df_2 = data.frame(a = 44, b = 24, c = rnorm(10))
df_3 = data.frame(a = 33, b = 99, c = rnorm(10))

df_all = rbind(df_1, df_2, df_3)

我需要将df_allab列分组,然后根据c列找到第50个分位数。

这可以单独完成,对于每个df,如下:

df_1_q = quantile(df_1$c, probs = 0.50)
df_2_q = quantile(df_2$c, probs = 0.50)
df_3_q = quantile(df_3$c, probs = 0.50)

但是我真正的df_all 比这个大。

更一般地说,我如何按行对data.frame 进行分组并应用给定函数?

谢谢

【问题讨论】:

标签: r dataframe group-by rows quantile


【解决方案1】:

您可以为此使用dplyr

library(dplyr)
df_all %>%
  group_by(a, b) %>%
  summarise(quantile = quantile(c, probs = 0.5))
# A tibble: 3 x 3
# Groups:   a [?]
      a     b quantile
  <dbl> <dbl>    <dbl>
1    22    24   -0.268
2    33    99   -0.234
3    44    24   -0.445

或者使用data.table作为:

library(data.table)
dt <- data.table(df_all)
dt[,list(quantile=quantile(c, probs = 0.5)),by=c("a", "b")]
    a  b       quantile
1: 22 24 -0.2679104
2: 44 24 -0.4450979
3: 33 99 -0.2336712

【讨论】:

  • 第 50 个分位数是中位数,所以 median 可能会快很多
  • 是的,但用户可以有他可能想要使用的任何百分位数。
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多