为重复值创建计数总和

时间:2014-06-23 13:48:30

标签: r

我有以下参与者数据集,其中包含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)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

你可以在这里使用聚合

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

这将取fsa的每个值的邀请和访问的总和。

答案 2 :(得分: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