2014-06-23 106 views
-1

我有以下參與者數據集,其中包含位置信息和導出的二進制變量invitevisit創建重複值的計數總和

id=c(1, 2,3,4,5,6,7,8) 
fsa=c("K3M", "L5N", "M3T", "N2P", "Q3L", "K3M", "M3T", "N2P") 
invite=c(1, 1, 1, 0, 1, 1, 0, 1) 
visit=c(1, 0, 0, 0, 0, 1, 0, 1) 
df=data.frame(id, fsa, invite, visit) 

我想創建二進制變量的計數總和,以查看某個位置有多少參與者已被邀請/訪問。因此,對於所有重複的FSA,我想獲得邀請來訪的總和,是這樣的:

的唯一標識此處無關緊要 - 我只是想理貨

fsa=c("K3M", "L5N", "M3T", "N2P", "Q3L") 
invite=c(2, 1, 1, 1, 1) 
visit=c(2, 0, 0, 1, 0) 
df.tomake=data.frame(fsa, invite, visit) 

回答

1

您可以使用這裏彙總

aggregate(cbind(invite,visit)~fsa, df, sum) 

這將花費fsa的每個值的邀請和訪問的總和。

+0

可以的,如果有超過2個變量,這個做得到的總和? – Tan

+0

當然,你可以添加儘可能多的'cbind'。 – MrFlick

+0

強制所有變量爲數字並運行您建議的代碼後,我收到此錯誤消息:錯誤在aggregate.data.frame(lhs,mf [-1L],FUN = FUN,...): no rows合計 – Tan

2

如果你不想指定列名,你想快速聚集,使用data.table

library(data.table) 
setDT(df)[, lapply(.SD, sum), by = fsa, .SDcols=-c("id")] 

## fsa invite visit 
## 1: K3M  2  2 
## 2: L5N  1  0 
## 3: M3T  1  0 
## 4: N2P  1  1 
## 5: Q3L  1  0 
0

另一種方式:

library(dplyr) 
df %>% 
    group_by(fsa) %>% 
     summarise_each(funs(sum), -1) 
# Source: local data frame [5 x 3] 

# fsa invite visit 
#1 K3M  2  2 
#2 L5N  1  0 
#3 M3T  1  0 
#4 N2P  1  1 
#5 Q3L  1  0