将计数数据帧添加到R中的模板数据帧

时间:2015-12-20 11:49:37

标签: r plyr

我有数据框架,例如:

a <- data.frame(id=1:10,
                "1"=c(rep(1,3),rep(0,7)),
                "3"=c(rep(0,4),rep(1,6)))
names(a)[2:3] <- c("1","3")
a
> a
   id 1 3
1   1 1 0
2   2 1 0
3   3 1 0
4   4 0 0
5   5 0 1
6   6 0 1
7   7 0 1
8   8 0 1
9   9 0 1
10 10 0 1

和模板data.frame,例如

m <- data.frame(id=1:10,
                "1"= rep(0,10),
                "2"= rep(0,10),
                "3"= rep(0,10),
                "4"= rep(0,10))
names(m)[-1] <- 1:4
m
> m
   id 1 2 3 4
1   1 0 0 0 0
2   2 0 0 0 0
3   3 0 0 0 0
4   4 0 0 0 0
5   5 0 0 0 0
6   6 0 0 0 0
7   7 0 0 0 0
8   8 0 0 0 0
9   9 0 0 0 0
10 10 0 0 0 0

我希望将a的值添加到模板m中 在适当的列中,其余列为0。

这是有效的,但我想知道 如果有更优雅的方式,可能使用plyr或data.table:

provi <- rbind.fill(a,m)
provi[is.na(provi)] <- 0
mnew <- aggregate(provi[,-1],by=list(provi$id),FUN=sum)
names(mnew)[1] <- "id"
mnew <- mnew[c(1,order(names(mnew)[-1])+1)]
mnew
> mnew
   id 1 2 3 4
1   1 1 0 0 0
2   2 1 0 0 0
3   3 1 0 0 0
4   4 0 0 0 0
5   5 0 0 1 0
6   6 0 0 1 0
7   7 0 0 1 0
8   8 0 0 1 0
9   9 0 0 1 0
10 10 0 0 1 0

1 个答案:

答案 0 :(得分:0)

您也可以使用merge

res <- suppressWarnings(merge(a, m, by="id", suffixes = c("", ""))) 
(res[, which(!duplicated(names(res)))][, names(m)])
#    id 1 2 3 4
# 1   1 1 0 0 0
# 2   2 1 0 0 0
# 3   3 1 0 0 0
# 4   4 0 0 0 0
# 5   5 0 0 1 0
# 6   6 0 0 1 0
# 7   7 0 0 1 0
# 8   8 0 0 1 0
# 9   9 0 0 1 0
# 10 10 0 0 1 0