Вероятно, вам нужно cbind
или data.frame
вместо merge
.
Вот пример:
> labelA <- array(letters[1:3], dim=c(3,1))
> # simple way
> data.frame(labelA, paste("A", "B", 1:3, sep = "_"), paste("C", "D", 1:3, sep = "_"))
labelA paste..A....B...1.3..sep...._.. paste..C....D...1.3..sep...._..
1 a A_B_1 C_D_1
2 b A_B_2 C_D_2
3 c A_B_3 C_D_3
> # generalize as a function
> f <- function(df, nA, nB) paste(nA, nB, 1:nrow(df), sep = "_")
> data.frame(labelA, f(labelA, "A", "B"), f(labelA, "C", "D"))
labelA f.labelA...A....B.. f.labelA...C....D..
1 a A_B_1 C_D_1
2 b A_B_2 C_D_2
3 c A_B_3 C_D_3
> # more generalize for flexible arguments
> f2 <- function(df, labels)
+ data.frame(df, do.call("cbind", llply(labels,
+ function(x) do.call("paste", c(as.list(x), list(1:nrow(df)), sep = "_")))))
> f2(labelA, list(c("A", "B"), c("C", "D")))
df X1 X2
1 a A_B_1 C_D_1
2 b A_B_2 C_D_2
3 c A_B_3 C_D_3
> f2(labelA, list(c("A", "B"), c("C", "D"), c("E", "F", "G")))
df X1 X2 X3
1 a A_B_1 C_D_1 E_F_G_1
2 b A_B_2 C_D_2 E_F_G_2
3 c A_B_3 C_D_3 E_F_G_3