2

次のようなデータフレームの場合

id<-c(1,1,2,3,3,2)
p<-c(10,0,22,34,0,0)
df<-data.frame(id,p)

次のような要約表が必要です

id   p
1    10
2    22
3    34

これは、実際には各IDのpの合計です。'dcast'でこれを取得できますか?

4

2 に答える 2

5

目的の結果を得るにはいくつかの方法があります。以下にそのいくつかを示しsplitますsapply

df <- data.frame(id, p)
sapply(split(df, df$id), function(x) sum(x$p))
 1  2  3 
10 22 34

または with でもっと短くtapply:

 tapply(p, id, sum)
 1  2  3 
10 22 34 

または、パッケージddplyから使用できます。plyr

library(plyr)
ddply(df, .(id), function(x) sum(x$p))
  id V1
1  1 10
2  2 22
3  3 34

最後に、次のものも使用できますby

 by(p, id, sum)
id: 1
[1] 10
------------------------------------------------------------ 
id: 2
[1] 22
------------------------------------------------------------ 
id: 3
[1] 34
于 2012-07-24T09:26:08.560 に答える
3

なぜあなたは必要dcastですか?aggregateベースRで試してください:

df <- data.frame(id = c(1,1,2,3,3,2),
                 p = c(10,0,22,34,0,0))
aggregate(df, by=list(id), sum)
#   Group.1 id  p
# 1       1  2 10
# 2       2  4 22
# 3       3  6 34

以下のように騙すこともできdcastます。あなたのデータは、次の場合に期待される「溶融」形式ではありませんdcast

library(reshape2)
dcast(df, id ~ ., value.var = "p", sum)
#   id NA
# 1  1 10
# 2  2 22
# 3  3 34
于 2012-07-24T09:23:30.650 に答える