1

私は100k以上のobsと12のcolsを持つdfを持っています。それらの列の1つは、別のdfに基づいて別の列を作成するために使用する必要があるIDの一種です。この他のdfには50個のobsしかなく、1つの列は最初のdfにコピーする必要のあるIDと値です。

これをコーディングすることはできません。これは部分的なdfです(両方)私はこの質問に関連する列だけを示しています

DF1(100k + obs)

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

これが値とIDを持つ2番目のdfです

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

次のように、両方の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

どんなアイデアでも大歓迎です。御時間ありがとうございます。

よろしく

4

2 に答える 2

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.tableFAQは、そのパッケージのニュアンスを学ぶのにおそらく最適な場所です: http://datatable.r-forge.r-project .org / datatable-faq.pdf

于 2012-04-19T18:08:44.170 に答える
3

あなたはこのようなことを試みるかもしれません:

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

設定する必要がありますall = TRUE。そうしないと、df2行のみがdf3に存在します。

于 2012-04-19T18:08:51.467 に答える