2012-06-09 5 views
2

더 우아한 방법이 있나요?R에서 벡터를 데이터 프레임에 결합하는 방법은 무엇입니까?

bcd <- rev(expand.grid(list(d=d,c=c,b=b))) 
abcd <- data.frame(a = a[match(bcd$b, b)], bcd) 

그것은 당신에게 18 행 즉 length(b)*length(c)*length(d)을 제공합니다 : 병렬, C에서 A와 B를 실행하고 당신은이 작업을 수행 할 수있는 직교 제품

a <- c("a","b","c") 
b <- c("A","B","C") 
c <- c(1,2,3) 
d <- c(11,22) 
nrow_cd <- length(c)*length(d) 
nrow_abcd <- length(a)*nrow_cd 
abcd <- data.frame(
    a=rep(a, each=nrow_cd), 
    b=rep(b, each=nrow_cd), 
    c=rep(c, each=length(d)), 
    d=rep(d, times=nrow_abcd) 
)  

abcd 
    a b c d 
1 a A 1 11 
2 a A 1 22 
3 a A 2 11 
4 a A 2 22 
5 a A 3 11 
6 a A 3 22 
7 b B 1 11 
8 b B 1 22 
9 b B 2 11 
10 b B 2 22 
11 b B 3 11 
12 b B 3 22 
13 c C 1 11 
14 c C 1 22 
15 c C 2 11 
16 c C 2 22 
17 c C 3 11 
18 c C 3 22 
19 a A 1 11 
20 a A 1 22 
21 a A 2 11 
22 a A 2 22 
23 a A 3 11 
24 a A 3 22 
25 b B 1 11 
26 b B 1 22 
27 b B 2 11 
28 b B 2 22 
29 b B 3 11 
30 b B 3 22 
31 c C 1 11 
32 c C 1 22 
33 c C 2 11 
34 c C 2 22 
35 c C 3 11 
36 c C 3 22 

답변

4

을 형성 거라고. 나는 당신이 당신의보기에 중복을 가지고 있다는 것을 의미하는지 확실하지 않습니다. 그렇다면 다음을 추가하십시오.

abcd <- rbind(abcd, abcd) 
+0

에게 좋은 깨끗 솔루션, 좋은 물건 ... 행 19시 36분 동일하다. +1 –

1

의도적으로 데이터 프레임을 두 배로 늘리려는 의도였습니까? 행 1:18

여기에 하나 개의 솔루션

a <- c("a","b","c") 
b <- c("A","B","C") 
c <- c(1,2,3) 
d <- c(11,22) 
nrow_cd <- length(c)*length(d) 

ab <- sapply(list(a,b), rep, each=nrow_cd) 
cd <- expand.grid(c,d) 
out <- cbind(ab, cd[rep(rownames(cd),length=nrow(ab)),]) 
rownames(out) <- 1:nrow(out) 
names(out) <- letters[1:4] 
out 
+0

끝내 주셔서 감사합니다. – nachocab

관련 문제