4

私は整数の2つのベクトル、たとえばv1=c(1,2)とを持っています。v2=c(3,4)これを組み合わせて、結果として(data.frameまたは行列として)取得したいと思います。

> combine(v1,v2) <--- doesn't exist
1 3
1 4
2 3
2 4

これは基本的なケースです。もう少し複雑なのはどうですか?すべての行を他のすべての行と組み合わせますか?たとえば、2つの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

どうすればこれを達成できますか?

4

1 に答える 1

8

ベクトルの単純な場合には、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
于 2012-06-02T17:39:15.563 に答える