我有两个整数向量,比如v1=c(1,2)
和v2=c(3,4)
,我想结合并获得结果(作为data.frame或矩阵):
> combine(v1,v2) <--- doesn't exist
1 3
1 4
2 3
2 4
这是一个基本案例。更复杂一点 - 将每一行与每一行结合起来?例如。想象我们有两个data.frames或矩阵d1和d2,我们希望将它们组合起来以获得以下结果:
d1
1 13
2 11
d2
3 12
4 10
> combine(d1,d2) <--- doesn't exist
1 13 3 12
1 13 4 10
2 11 3 12
2 11 4 10
我怎么能实现这个目标?
答案 0 :(得分:6)
对于矢量的简单情况,有expand.grid
v1 <- 1:2
v2 <- 3:4
expand.grid(v1, v2)
# Var1 Var2
#1 1 3
#2 2 3
#3 1 4
#4 2 4
我不知道会自动执行您想要为数据帧做什么的函数(参见编辑)
我们可以使用expand.grid和cbind相对容易地完成此任务。
df1 <- data.frame(a = 1:2, b=3:4)
df2 <- data.frame(cat = 5:6, dog = c("a","b"))
expand.grid(df1, df2) # doesn't work so let's try something else
id <- expand.grid(seq(nrow(df1)), seq(nrow(df2)))
out <-cbind(df1[id[,1],], df2[id[,2],])
out
# a b cat dog
#1 1 3 5 a
#2 2 4 5 a
#1.1 1 3 6 b
#2.1 2 4 6 b
编辑:正如Joran在评论merge
中指出的那样,我们为数据框做了这个。
df1 <- data.frame(a = 1:2, b=3:4)
df2 <- data.frame(cat = 5:6, dog = c("a","b"))
merge(df1, df2)
# a b cat dog
#1 1 3 5 a
#2 2 4 5 a
#3 1 3 6 b
#4 2 4 6 b