2016-04-16 9 views
0

あるデータフレームから値を収集し、別のデータフレームに配置する必要があります。私はマージ関数を使用しようとしましたが、それは第2のデータフレームで命令を乱してしまいます。2つのデータフレームを結合する

これは私のデータの様子です。

> df<-as.data.frame(cbind(letters[1:4],1:4)) 
> df 
    V1 V2 
1 a 1 
2 b 2 
3 c 3 
4 d 4 

> dflist <- data.frame("home"= sample(df[,1],15, replace = TRUE)) 
> 
> dflist$away <-sample(df[,1],15, replace = TRUE) 
> dflist 
    home away 
1  a b 
2  a a 
3  d c 
4  d a 
5  c c 
6  a c 
7  b d 
8  b b 
9  a b 
10 b d 
11 b a 
12 a a 
13 a c 
14 c b 
15 d a 

希望の結果は次のようになります。

home away value1 value2 
1  a b 1 2 
2  a a 1 1 
3  d c 4 3 
4  d a 4 1 
5  c c 3 3 
. 

ここでマージを使用すると結果表が失われます。

+0

をあなたはdflist' '順番を維持したいと仮定すると、あなたは(インデックス列を作成することができます例えば、' $ idxを steveb

+1

サンプルの再現性のために 'set.seed'を使用してください。 – DatamineR

答えて

0

あなたはこれを試みることができる:

dflist[c("value1", "value2")] <- t(apply(dflist, 1, function(x) 
    c(df[match(x[1], df$V1),2], df[match(x[2], df$V1),2]))) 
dflist 
    home away value1 value2 
1  a b  1  2 
2  a a  1  1 
3  d c  4  3 
4  d a  4  1 
5  c c  3  3 
6  a c  1  3 
7  b d  2  4 
8  b b  2  2 
9  a b  1  2 
10 b d  2  4 
11 b a  2  1 
12 a a  1  1 
13 a c  1  3 
14 c b  3  2 
15 d a  4  1 
+0

これは私が欲しいものです。しかし、私はあなたのテキストをコピーするとエラーメッセージが表示されます。 dflist [c( "value1"、 "value2")] < - t(apply(dflist、1、function(x) + c(df [match] x [1]、df $ V1) (X [[j]]、 "data.frame")&& ncol(xj)> 1L)のエラー[ [j]] - as.matrix(X [[j]]): TRUE/FALSEが必要な値がありません – samot79

+0

私は謝罪します。魅力のように動作します:) – samot79

+0

聞いてうれしいです:-) – DatamineR

関連する問題