2014-01-23 4 views
0

나는 더 큰 데이터 프레임에 카운트 2 팩터 - 클래스 벡터 (b1 & b2)를 도표화/매핑하려고합니다. 벡터의 요약은 다음과 같습니다 :2 팩터 클래스 벡터의 수를 큰 데이터 프레임으로 표로 만드는 방법은 무엇입니까?

> summary(b1) 
(4,6] (6,8] NA's 
    16  3  1 
> summary(b2) 
(4,6] (6,8] NA's 
    9  0 11 
내가 더 큰 dataframe에 위의 수를지도하고 싶은

:

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) 

답변

2

table 기능은 당신이 필요로하는 표를한다. 명명 된 벡터를 반환하고 이름을 열 e$Intervals과 비교하여 올바른 값을 할당 할 수 있습니다.

이것은 요인 수준의 순서가 e$Intervalsb1b2에서 동일하다는 사실에 달려 있습니다. 이것들은 모두 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 
+0

너무 우아한 코드입니다. 나는 R 코드에서 내 기초에 대해 더 열심히 일할 필요가있는 것처럼 보입니다. 나는 결코 % in 구조를 만들 수 없었습니다. 도와 줘서 고마워, @ MatthewLundberg! – NoviceProg