我認爲這個模式符合你描述的模式。首先,這裏的一些示例性數據:
A <- data.frame(A.ID=1:2, X=1:2, Y=3:2, Z=2:1)
B <- data.frame(B.ID=1:2, X=1:2, Y=2:1, Z=1:2)
A;B
# A.ID X Y Z
#1 1 1 3 2
#2 2 2 2 1
# B.ID X Y Z
#1 1 1 2 1
#2 2 2 1 2
X <- matrix(1:9,nrow=3); Y <- matrix(1:16,nrow=4); Z <- matrix(1:4,nrow=2)
X;Y;Z
# [,1] [,2] [,3]
#[1,] 1 4 7
#[2,] 2 5 8
#[3,] 3 6 9
# [,1] [,2] [,3] [,4]
#[1,] 1 5 9 13
#[2,] 2 6 10 14
#[3,] 3 7 11 15
#[4,] 4 8 12 16
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
然後一束Map
平所需的索引中的一個矩陣,它用於子集中的每個所述X
/Y
/Z
對象:
arep <- rep(1:nrow(A),nrow(B))
brep <- rep(1:nrow(B),each=nrow(A))
cells <- Map(
`[`,
list(X=X,Y=Y,Z=Z),
Map(function(x,y) t(mapply(c,x,y)), A[arep,-1], B[brep,-1])
)
data.frame(A["A.ID"][arep,,drop=FALSE], B["B.ID"][brep,,drop=FALSE], cells)
# A.ID B.ID X Y Z
#1 1 1 1 7 2
#2 2 1 2 6 1
#1.1 1 2 4 3 4
#2.1 2 2 5 2 3
我知道這可能是一個正確的痛苦,但如果你能提供A/B/X/Y/Z的可重複的例子和預期結果的C(數據集可能只有3或4行),你會更有可能在答案中獲得代碼。 – thelatemail