teratail header banner
teratail header banner
質問するログイン新規登録
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

RStudio

RStudioは、Rのプログラミングを効率化する統合開発環境です。統計計算とグラフィックスができるプログラミング言語であるRのIDEでOSSで公開されています。ソースコードやコンソールなどが一つの画面に見やすく配置されている点が特徴。コマンド名以外に、関数名やパッケージ名も補完できます。

R

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

Q&A

解決済

1回答

502閲覧

Rにて、変換表に対応させながら特定の文字を変換したい。

maltines

総合スコア12

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

RStudio

RStudioは、Rのプログラミングを効率化する統合開発環境です。統計計算とグラフィックスができるプログラミング言語であるRのIDEでOSSで公開されています。ソースコードやコンソールなどが一つの画面に見やすく配置されている点が特徴。コマンド名以外に、関数名やパッケージ名も補完できます。

R

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

0グッド

0クリップ

投稿2022/12/19 19:06

0

0

前提

Rにてデータハンドリングをしています。

編集したいデータが以下のようになっています。

num:番号
name:名前
addr:住所
dt:年月日
match:変換表(後述)との対応列

R

1>head(data) 2 num name addr dt match 3 <dbl> <chr> <chr> <dbl> <int> 41 2010000001 山田 太郎 埼玉県所沢市 20100101 NA 52 2010000002 井上 花子 神奈川県横浜市 20100101 NA 63 2010000003 佐藤 広明 東京都中野区 20100101 NA 74 2010000004 高橋 健二 高知県高知市 20100101 NA 85 2010000009 江宮 真太郎 東京都調布市 20100103 NA 96 2010000009 江宮 正人 東京都調布市 20100103 NA 10

実現したいこと

dataのaddrの列で、一部市町村のみになっている行があるので、それ取り出し都道府県+市町村に変換したいです。
例:川崎市→神奈川県川崎市

また、変換のための対応表が別にあり、以下のようになっています。
before:変換前の市町村
after:変換後の都道府県+市町村

R

1>head(trans) 2# A tibble: 6 x 2 3 before after 4 <chr> <chr> 51 川崎市 神奈川県川崎市 62 名古屋市 愛知県名古屋市 73 摂津市 大阪府摂津市 84 大阪市 大阪府大阪市 95 京都市 京都府京都市 106 神戸市 兵庫県神戸市

ちなみにdataの5列目matchは、この変換表の対応列となっています。ほとんどはNAですが、市町村のみとなっている所のみ、この変換表の何行目に変換が書いてあるかの行数が記入してあります。
例:川崎市:1、神戸市:6

発生している問題・該当のソースコード

いかのコードを読み込んだのですが、変換した所以外がNAになってしまいます。他を保ったまま該当箇所のみ変換したいです。

R

1data <- data%>% 2 map_df( ~ {trans$after[match(data$addr, trans$before)]}) 3

試したこと

いかのコードも試したのですが、エラーが出ました。

R

1>for (i in 1:nrow(data)) { 2 if(is.na(data[i,5]) == TRUE){ 3 data[i,3] = trans[data[i,5],2] 4 } 5 } 6 7Error in `vectbl_as_row_location()`: 8! Must subset rows with a valid subscript vector. 9x Subscript `data[i, 5]` has the wrong type `tbl_df<match:integer>`. 10i It must be logical, numeric, or character. 11Run `rlang::last_error()` to see where the error occurred.

どなたか解決方法ご存じの方、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

r

1data <- data %>% 2 mutate(addr = ifelse(is.na(match), addr, trans$after[match(addr, trans$before)]))

投稿2022/12/20 04:12

編集2022/12/20 04:27
melian

総合スコア21265

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

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

maltines

2022/12/20 07:10

こちらを実行したところ、addrの列が全てNAになってしまいました。自分から見ても原因が分かりません。考えられる原因はございますでしょうか。
melian

2022/12/20 07:43

可能性として、 match の値が NA ではなく、かつ、変換表(trans データフレーム)に対応する after の値がない といったところでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問