【问题标题】:R: aggregate a data frame based on certain conditionR:根据特定条件聚合一个数据框
【发布时间】:2015-01-16 05:38:59
【问题描述】:

我有一个数据框。我想根据另一个列表聚合其中的一列。

df<-data.frame(X=c("a", "b", "c", "d"), Y=c(0.5, 0.4, 0.01, 0.09))
X     Y
a     0.5
b     0.4
c     0.01
d     0.09

l<-c("a", "c", "d")

l 是需要组合在一起的列表。所以,在这里我想将 l 中的 df$X 中的所有元素分组。

My desired result is:
X     Y
a'    0.6
b     0.4

你知道怎么做吗?

谢谢。

【问题讨论】:

    标签: r list dataframe aggregate


    【解决方案1】:

    我们可以“暂时”将相关的X 值更改为相同的分组变量,然后进行聚合。这里我随意选择l[1],也正好是"a"

    aggregate(Y ~ X, within(df, X <- replace(X, X %in% l, l[1])), sum)
    #   X   Y
    # 1 a 0.6
    # 2 b 0.4
    

    aggregate() 调用中使用within() 的一个好处是原始df 将保持不变。

    【讨论】:

      【解决方案2】:

      使用data.table的选项

      library(data.table)
      df1 <- copy(df)
      setkey(setDT(df1), X)[l, X:='a'][, list(Y=sum(Y)), X]
      #  X   Y
      #1: a 0.6
      #2: b 0.4
      

      【讨论】:

        猜你喜欢
        • 2021-06-01
        • 2015-03-16
        • 2022-01-18
        • 2016-10-02
        • 2015-02-07
        • 2020-04-24
        • 1970-01-01
        • 2021-12-01
        • 2019-02-11
        相关资源
        最近更新 更多