我有一个看起来像这样的数据集。您可以看到列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
答案 0 :(得分:4)
由于您使用rnorm
,我无法重现您的确切数据,但这是一个简单的聚合。公式方法最适合此类型。
aggregate(X1 ~ X2, df, sum)
答案 1 :(得分:1)
对于较大的数据集,您可以使用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))
答案 2 :(得分:0)
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