2016-11-28 4 views
2

私はかなり新しいですが、いくつかの指示を探しています。どんな助けも大歓迎です。4つ以上のベクトルから2と3の変数の組み合わせを作成する

私は、次のベクトルを持っている:

> types <- c("A", "B", "C", "D", "E") 
> regions <- c("Atlantic", "Central", "Western") 
> categories <- c("AA", "AB", "MN", "XY") 
> market <- c("Small", "Medium", "Large") 

私が前年同期比(前年比)これらのベクトルの値のすべての組み合わせの値を計算しようとしています。組み合わせは2倍または3倍にすることができます。ここではいくつかの例は、私が要約処理のためdplyr使用するが、私は、キーがわからない場合、私は私のメインのデータセットをフィルタリングすることができません

("A", "Atlantic", "AA") 
("A", "Atlantic", "Small") 
("A", "AB", "Small") 
... 
("A", "Small") 
("B", "Western") 

...です。私が取得する)(strsplitを使用できるように

例えば、私は(::、 "小さな市場" "Aタイプ")

...のようになりダブルスが必要になります変数名。

(すべての名前の組み合わせを作成することも可能ですか?

答えて

2

私は、これはあなたがやりたいだろうと思う:

名を含む
combos2 <- combn(c('types', 'regions', 'categories', 'market'), 2) 
combos3 <- combn(c('types', 'regions', 'categories', 'market'), 3) 

c(unlist(apply(combos2, 2, function(x) apply(expand.grid(get(x[1]), get(x[2])), 1, paste, collapse=':'))), 
    unlist(apply(combos3, 2, function(x) apply(expand.grid(get(x[1]), get(x[2]), get(x[3])), 1, paste, collapse=':')))) 

は、このように(でもあまりエレガント)を達成することができます。

c(unlist(apply(combos2, 2, function(x) apply(expand.grid(get(x[1]), get(x[2])), 1, function(y) paste(x[1],y[1],x[2],y[2], sep=':')))), 
    unlist(apply(combos3, 2, function(x) apply(expand.grid(get(x[1]), get(x[2]), get(x[3])), 1, function(y) paste(x[1],y[1],x[2],y[2],x[3],y[3], sep=':'))))) 

これは使用して、あなたのすべての2と3の組み合わせを提供しますget()を使用して関連オブジェクトを返し、expand.grid()にフィードします。あなたが4と5などのすべての長いバージョンを望むなら、それは最もエレガントではありませんが、動作します。

+1

申し訳ありませんが、私は最初の投稿を少し誤って読んでいます。あなたにとって最も便利な構造に応じて、たとえば列1を変数名とし、列2を値 – ds440

+0

とする配列を与えるために書き直したいかもしれません。働いた。申し訳ありませんが、名前を含める方法が少し分かりませんでした。どうもありがとうございます。 – KalC

関連する問題