用於數據幀作爲遵循ř求和樞軸表
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
這實際上是聚集P的總和爲每個ID的彙總表。 我可以用'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
這實際上是聚集P的總和爲每個ID的彙總表。 我可以用'dcast'得到這個嗎?
爲什麼你需要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
對輸出(colnames)只做了一點改進: 'aggregate(list(p = df $ p),by = list(id = df $ id),sum)' – Alan 2012-07-24 09:44:39
@Alan,是的,這是更好看的輸出。 – A5C1D2H2I1M1N2O1R2T1 2012-07-24 09:47:21
有多種方法以獲得所需的結果,這裏有幾個: 你可以使用split
和sapply
:
df <- data.frame(id, p)
sapply(split(df, df$id), function(x) sum(x$p))
1 2 3
10 22 34
或者與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
:您尚未創建`data.frame`用`DF = C( 「ID」,「P
by(p, id, sum)
id: 1
[1] 10
------------------------------------------------------------
id: 2
[1] 22
------------------------------------------------------------
id: 3
[1] 34
注「)'。相反,你已經創建了一個有兩個字符串的向量。 – A5C1D2H2I1M1N2O1R2T1 2012-07-24 09:24:47
@mrdwab:是的,我剛糾正它。我打算創建一個數據框 – AliCivil 2012-07-24 11:32:34