【问题标题】:Aggregate with max and factors聚合最大值和因子
【发布时间】:2017-12-25 01:09:36
【问题描述】:

我有一个包含因子列的 data.frame,我想在其上计算最大值(或最小值或分位数)。我不能在因子上使用这些函数,但我想。

这里有一些例子:

set.seed(3)
df1 <- data.frame(id = rep(1:5,each=2),height=sample(c("low","medium","high"),size = 10,replace=TRUE))
df1$height <- factor(df1$height,c("low","medium","high"))
df1$height_num <- as.numeric(df1$height)
# > df1
#    id height height_num
# 1   1    low          1
# 2   1   high          3
# 3   2 medium          2
# 4   2    low          1
# 5   3 medium          2
# 6   3 medium          2
# 7   4    low          1
# 8   4    low          1
# 9   5 medium          2
# 10  5 medium          2

我可以轻松做到这一点:

aggregate(height_num ~ id,df1,max)
#   id height_num
# 1  1          3
# 2  2          2
# 3  3          2
# 4  4          1
# 5  5          2

但不是这个:

aggregate(height ~ id,df1,max)
# Error in Summary.factor(c(2L, 2L), na.rm = FALSE) : 
#   ‘max’ not meaningful for factors

我想取最大的“高度”,并在我的汇总表中保持与原始表相同的级别。在我的真实数据中,我有很多列,我希望对我的因素进行排序,以保持我的图干净和一致。

我可以这样做,并在其他聚合函数中使用以下结构:

use_factors <- function(x,FUN){factor(levels(x)[FUN(as.numeric(x))],levels(x))}
aggregate(height ~ id,df1,use_factors,max)
#   id height
# 1  1   high
# 2  2 medium
# 3  3 medium
# 4  4    low
# 5  5 medium

或者我可以重载 max min medianquantile 函数我想 但我觉得我肯定是在重新发明轮子。

有没有简单的方法可以做到这一点?

【问题讨论】:

    标签: r max aggregate min factors


    【解决方案1】:

    实际上,如果您使用有序因子,可以进行所需的聚合。

    set.seed(3)
    df1 <- data.frame(id = rep(1:5,each=2),height=sample(c("low","medium","high"),size = 10,replace=TRUE))
    df1$height <- factor(df1$height,c("low","medium","high"), ordered = TRUE)
    df1$height_num <- as.numeric(df1$height)
    
    aggregate(height~id, df1, max) 
      id height
    1  1   high
    2  2 medium
    3  3 medium
    4  4    low
    5  5 medium
    

    【讨论】:

    • 非常感谢,我知道这一定很简单!错误说‘max’ not meaningful for factors 非常具有误导性
    • 是的。该消息可能会更有帮助。
    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2019-08-03
    • 1970-01-01
    • 2021-02-11
    • 2021-01-04
    相关资源
    最近更新 更多