我有以下参与者数据集,其中包含invite
和visit
的派生二进制变量的位置信息。
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)
答案 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