如何将2个因子类向量的计数表制成大数据帧?

时间:2014-01-23 04:32:00

标签: r count intervals r-factor

我正在尝试将2个因子类向量(b1和b2)的计数制表/映射到更大的数据帧。载体概述如下:

> summary(b1)
(4,6] (6,8]  NA's 
   16     3     1 
> summary(b2)
(4,6] (6,8]  NA's 
    9     0    11 

我想将上述计数映射到更大的数据框:

  Intervals b1 b2
1  (-Inf,0] NA NA
2     (0,2] NA NA
3     (2,4] NA NA
4     (4,6] NA NA
5     (6,8] NA NA
6    (8,10] NA NA
7   (10,12] NA NA
8 (12, Inf] NA NA

我的问题:是否有一种矢量化或更直接的方式来执行上述操作而不诉诸'for'循环+ if-else条件检查?这似乎很容易做到,但我'我一直有这种心理障碍,我没有成功在线寻找相关的帮助。任何帮助/提示表示赞赏。提前谢谢!

附上我的示例代码:

NoOfElement <- 20
MyBreaks <- c(seq(4, 8, by=2))
MyBigBreaks <- c(-Inf, seq(0,12, by=2), Inf)

set.seed(1)
a1 <- rnorm(NoOfElement, 5); a2 <- rnorm(NoOfElement, 4)
b1 <- cut(a1, MyBreaks); b2 <- cut(a2, MyBreaks)

c <- seq(-10, 10)
d <- cut(c, MyBigBreaks)

e <- data.frame( Intervals=levels(d), b1=NA, b2=NA )

1 个答案:

答案 0 :(得分:2)

table函数执行您需要的制表。它返回一个命名向量,您可以将名称与列e$Intervals进行比较,以指定正确的值。

这依赖于e$Intervalsb1以及b2中因子级别的顺序相同的事实。之所以如此,是因为这些都来自cut

e$b1[e$Intervals %in% names(table(b1))] <- table(b1)
e$b2[e$Intervals %in% names(table(b2))] <- table(b2)
e
##   Intervals b1 b2
## 1  (-Inf,0] NA NA
## 2     (0,2] NA NA
## 3     (2,4] NA NA
## 4     (4,6] 16  9
## 5     (6,8]  3  0
## 6    (8,10] NA NA
## 7   (10,12] NA NA
## 8 (12, Inf] NA NA