質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

934閲覧

【R】二つの表の比較・置換をしたい

essa

総合スコア81

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2018/11/28 01:55

【R】二つの表の比較・置換をしたい

Rにて、二つの表を比較し、条件にマッチしたときだけ置換するような
処理をしたいです。

元の表は下記です。
|CODE|A品|B品|C品|D品|E品|
|:--|:--:|--:|
|A100|AA1|BA1|CA1|DA1|EA1|
|A101|AA3|BA3|CA3|DA3|EA3|
|A102|A56|B56|C56|D56|E56|
|A103|Agi|Bgi|Cgi|Dgi|Egi|
~省略~~
|Z997|AAB|BAB|CAB|DAB|EA1|
|Z998|AAC|BAC|CAC|DAC|EA3|
|Z999|AOG|BOG|COG|DOG|E56|

上の表を、下記の表に従って更新したいと思います。

CODEA品B品
A100AA100BA105
A101AA301BA306
A102A5607B5608

ただし、上記の二つの表は
同じ列数ではありません。
上の表の列数>下の表の列数
という関係になっております。

上記を踏まえて、出力として出したいのは
下記のようなデータです。

|CODE|A品|B品|C品|D品|E品|
|:--|:--:|--:|
|A100|AA100|BA105|CA1|DA1|EA1|
|A101|AA301|BA306|CA3|DA3|EA3|
|A102|A5607|B5608|C56|D56|E56|
|A103|Agi|Bgi|Cgi|Dgi|Egi|
~省略~~
|Z997|AAB|BAB|CAB|DAB|EA1|
|Z998|AAC|BAC|CAC|DAC|EA3|
|Z999|AOG|BOG|COG|DOG|E56|

下記のようなプログラムを書きました。

R

1 2上の表 <- mutate(上の表,A品_更新=ifelse(上の表$A品==下の表$A品,下の表$A品,0))

しかし下記のようなエラーがおきました。

Error in mutate_impl(.data, dots) :
Column A品_更新 must be length 752 (the number of rows) or one, not 16464
In addition: Warning message:
In 上の表$A品==下の表$A品 :
longer object length is not a multiple of shorter object length

列の数が一致していないため、上記のようなエラーが起きてしまったと思います。
どのようにすれば実現するでしょうか。

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決しました。

R

1重複ID <-1$識別番号[1$識別番号%in%2$識別番号] 21[1$識別番号%in%重複ID,c("AAA","BBB","CCC")] <- 32[2$識別番号%in%重複ID,c("AAA","BBB","CCC")]

計算速度ですが、最初に書いたforの二重ループは経過的にみて6時間以上はかかりそうですが、
こちらに書いたコードでは1分もかからない程度でした。

Rはループ処理を極力使わないほうが良いと勉強になりました。

ありがとうございました。

投稿2018/11/28 08:49

essa

総合スコア81

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問