2016-06-16 5 views
3

列名としてベクトル名をマージして使用:私はFOOを検査する場合、私はマージ関数は、2つの列xを指名したことを確認、二つのベクトルaとbのマージRIで

a <- c(100,250) 
b <- c(0,100,200) 
foo <- merge(a,b,all=TRUE) 

およびY:

> foo 
    x y 
1 100 0 
2 250 0 
3 100 100 
4 250 100 
5 100 200 
6 250 200 

は、得られたデータフレームに列名として、元の変数名を保つためのエレガントな方法はありますか? 「エレガントな」とは、explicitly renaming the columnsより単純なものを意味します。

+0

実生活で2つの変数を「マージ」したいのですが、このケースにマッチすることはありますか?なぜなら、私はこのユースケースに対して 'expand.grid'を提案しているからです。 ( '(" a "、" b "))')を使用して、名前を二重参照することを避けたい場合は、 – TARehman

答えて

8
我々はdata.frameに変換することができます

merge

merge(as.data.frame(a), as.data.frame(b), all = TRUE) 
# a b 
#1 100 0 
#2 250 0 
#3 100 100 
#4 250 100 
#5 100 200 
#6 250 200 
8

あなたはまた、あなたの特定のユースケースのためexpand.grid()を使用することができます。

expand.grid(a = a,b = b) 
    a b 
1 100 0 
2 250 0 
3 100 100 
4 250 100 
5 100 200 
6 250 200 
+0

'expand.grid(mget – thelatemail

1

あなたは複雑な生活を好む場合は、ここでは別のオプションは次のとおりです。

cross.join <- function(a, b) { 
    idx <- expand.grid(seq(length=length(a)), seq(length=length(b))) 
    df <- data.frame(a[idx[,1]], b[idx[,2]]) 
    colnames(df) <- c(deparse(substitute(a)), deparse(substitute(b))) 
    return(df) 
} 

a <- c(100,250) 
b <- c(0,100,200) 
cross.join(a,b) 
    a b 
1 100 0 
2 250 0 
3 100 100 
4 250 100 
5 100 200 
6 250 200 
3

ます。また、これはdata.tableを返すことdata.tableパッケージ

library(data.table) 
CJ(a=a,b=b) 
    a b 
1: 100 0 
2: 100 100 
3: 100 200 
4: 250 0 
5: 250 100 
6: 250 200 

ノートでCJを使用することができますこれはdata.frameと似ていますが、data.frameとはいくつか異なる動作をしています。

data.frame(CJ(a=a,b=b)) 
関連する問題