2012-04-19 5 views
1

私は100k + obsと12 colsのdfを持っています。これらの列のうちの1つは、別の列に基づいて別の列を作成するために使用する必要があるIDです。この他のdfには50個のobsがあり、1つのcolはidと最初のdfにコピーするのに必要な値です。別のデータフレームのIDから選択した値に基づいて新しい列を割り当てます。

私はこれをコード化できません。ここで私はここで

id 
010100 
010100 
010100 
010100 
010100 
010100 
010200 
010200 
010200 
010201 
010201 
010201 
010201 
010201 
010201 
010201 
010300 
010300 
010300 
010300 
010300 
010400 
010400 
010400 
010500 
010500 
010501 
010501 
010501 
010600 
010600 
010600 
010600 

が第二の値を持つDFとid

id   val 
010100 1 
010200 2 
010201 2 
010300 3 
010400 4 
010500 5 
010501 6 
010600 7 
で、この質問のために

DF1(100K + OBS)をのみ関連のcolsを示していますパーシャルDF(両方)があります私は必要なもの

は、次のように両方のDFのIDに応じて、DFの新しい列でのvalを持つことです。

id New 
010100 1 
010100 1 
010100 1 
010100 1 
010100 1 
010100 1 
010200 2 
010200 2 
010200 2 
010201 2 
010201 2 
010201 2 
010201 2 
010201 2 
010201 2 
010201 2 
010300 3 
010300 3 
010300 3 
010300 3 
010300 3 
010400 4 
010400 4 
010400 4 
010500 5 
010500 5 
010501 6 
010501 6 
010501 6 
010600 7 
010600 7 
010600 7 
010600 7 

どんなアイデアにも感謝します。御時間ありがとうございます。

よろしく

+1

「?merge」には15文字までのテキストが入ります。 – joran

+0

ありがとうございました。私はマージを試みましたが、すべて= Tなしでした。これはトリックでした。 – notuo

答えて

3
df3 <- merge(df1, df2, by="id", all = TRUE) 

all = TRUEを設定するか、df2にdf2行だけが存在する必要があります。

3

mergeあなたが望むものであるか、あるいはあなたはdata.tableパッケージを使用して、いくつかの速度の利点に気づくことがあります。

df1 <- data.frame(id = 1:3) 
df2 <- data.frame(id = rep(1:3, each = 2), val = rnorm(6)) 

> merge(df1, df2) 
    id  val 
1 1 0.9462113 
2 1 -1.7835754 
3 2 -1.1604525 
4 2 0.2498844 
5 3 -1.5187111 
6 3 0.5921281 

library(data.table) 
dt1 <- data.table(df1, key = "id") 
dt2 <- data.table(df2, key = "id") 

> dt1[dt2] 
    id  val 
[1,] 1 0.9462113 
[2,] 1 -1.7835754 
[3,] 2 -1.1604525 
[4,] 2 0.2498844 
[5,] 3 -1.5187111 
[6,] 3 0.5921281 

は、可能な加入のタイプの詳細について?mergeのヘルプページを参照してください。 data.tableのFAQはおそらくそのパッケージのニュアンスを学ぶのに最適な場所です:http://datatable.r-forge.r-project.org/datatable-faq.pdf

関連する問題