2014-06-23 72 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