【问题标题】:Sum by Key Value in r按 r 中的键值求和
【发布时间】:2014-09-20 05:39:04
【问题描述】:

我有一个看起来像这样的数据集。您可以看到 X2 列具有键值。我想将 X1 列中的对值与 X2 列中的键值相加。我一直在尝试使用 ddply 或聚合,但我遇到了问题。有没有人有一个简单的方法来做到这一点?

> X1=rnorm(30,mean=20, sd=10)
> X2=rep(1:15,2)
>df= data.frame(X1,X2)
          X1 X2
1  10.065545  1
2   6.938315  2
3   5.657782  3
4  11.371521  4
5  37.037992  5
6  13.443674  6
7   8.868314  7
8   5.944946  8
9  18.493563  9
10 16.059931 10
11 22.520693 11
12 17.172936 12
13 28.676676 13
14 27.200911 14
15 30.560696 15
16 22.435021  1
17 31.143627  2
18 19.234473  3
19 29.329251  4
20 18.420183  5
21 13.184905  6
22  7.798989  7
23 12.910870  8
24 12.513204  9
25 25.760775 10
26 19.479005 11
27 13.696628 12
28 11.016639 13
29 35.126859 14
30 17.632507 15

【问题讨论】:

  • 你试过的代码是什么?你遇到了什么“问题”。这似乎是最基本的聚合问题。此外,在这种格式下,很难区分数据框中列的类别。最好分享所涉及对象的dput()。见how to create a reproducible example
  • 这正是我想要的,谢谢!!!对不起,如果我含糊不清

标签: r key aggregate plyr key-value


【解决方案1】:

由于您使用rnorm,我无法重现您的确切数据,但这是一个简单的聚合。公式法最适合这种类型。

aggregate(X1 ~ X2, df, sum)

【讨论】:

  • 谢谢,就是这样!
【解决方案2】:

对于更大的数据集,您可以使用data.table 选项

 library(data.table)
 setDT(df)[, list(sum(X1, na.rm=TRUE)), by=X2]

dplyr

 library(dplyr)
 df %>% 
     group_by(X2) %>%
     summarise(X1=sum(X1, na.rm=TRUE))

【讨论】:

    【解决方案3】:

    tapply 也可以使用:

    with(df, tapply(X1, X2, sum))
           1        2        3        4        5        6        7        8        9       10       11       12       13       14 
    26.99725 24.88007 16.62240 27.98272 62.02971 38.87095 19.60940 41.50565 61.22318 48.31883 17.12463 51.68966 53.16138 11.21039 
          15 
    43.55936 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 2021-12-29
      相关资源
      最近更新 更多