次のようなデータフレームの場合
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'でこれを取得できますか?
次のようなデータフレームの場合
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'でこれを取得できますか?
目的の結果を得るにはいくつかの方法があります。以下にそのいくつかを示し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
なぜあなたは必要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