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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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

解決済

2回答

1140閲覧

特定の名前のファイルをループさせて、ディレクトリを移動させ、ファイルを読み込み統合させたいです。

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/10/14 15:20

編集2022/10/26 09:36

前提

RStudioで大学の授業用にデータを取り込みまとめる作業を行っています。

(10/25(月)時点)melianさんのご意見と自分の試行錯誤を基に修正を重ね、各部分に修正を重ねました。各項目において、冒頭に最新の状態と日付を太字で書いています、その下に※と過去の日付、修正経過を書いています。

実現したいこと

現在、ディレクトリ構造としては
フォルダ群があるディレクトリ>>日付由来の名前のフォルダ

この日付由来のフォルダの中のファイルの中において、特定の名前があるファイルを全て読み込み、オブジェクトに縦方向に統合したデータを作りたいです。
(修正点:当初とディレクトリ構造が変わっています。)

発生している問題・エラーメッセージ

最新のエラーメッセージ(10/25(月)時点)

R

1app <- app_filelist %>% 2+ map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% #各ファイルを読み込み 3+ mutate(abct_clmt_atty_id = as.character(abct_clmt_atty_id)) %>% #エラーが出る列を文字列化 4+ select(2, 20, 28, 43) #目当ての列を指定 5Error in `dplyr::bind_rows()`: 6! Can't combine `abct_clmt_atty_id` <character> and `abct_clmt_atty_id` <double>. 7Run `rlang::last_error()` to see where the error occurred. 8Warning messages: 91: One or more parsing issues, see `problems()` for details 102: One or more parsing issues, see `problems()` for details 113: One or more parsing issues, see `problems()` for details

10/15(木)僕のコメントのエラーに基づいた、10/16(金)のmelianさんのアドバイスに従ってもう一度走らせると、同じエラーが出ました。mutate()でabct_clmt_atty_id 列の値を全て character 型に変換する処理を行ったはずなのですが、同じエラーが出てきてしまいます。

先日と異なりapp_filelistはemptyではありませんでした。しかし、10/16にコメントでmelianさんがおっしゃられていたファイルの中のフォーマットの確認は、ファイルが重すぎて出来ていません。

また、

Warning messages: 1: One or more parsing issues, see `problems()` for details 2: One or more parsing issues, see `problems()` for details 3: One or more parsing issues, see `problems()` for details

この意味は何でしょうか、このエラーと関連はあるのでしょうか。

※エラーメッセージ(10/16(金)時点)

defrodir <- "C://Users//yusuk//OneDrive ...//after defrost" > app <- app_filelist %>% + map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% #各ファイルを読み込み + mutate(abct_clmt_atty_id = as.character(abct_clmt_atty_id)) %>% + select(2, 20, 28, 43) #目当ての列を指定 Error in `mutate()`: ! Problem while computing `abct_clmt_atty_id = as.character(abct_clmt_atty_id)`. Caused by error: ! object 'abct_clmt_atty_id' not found Run `rlang::last_error()` to see where the error occurred.

※元々のエラーメッセージ(10/14(金)投稿時)

> for (file in 1:length(file_list)){ + targetdir <-sprintf("%s//%s//%s",defordir,basename(file_list[file]),"JPWAP") + setwd(targetdir) + + + #app <- do.call(rbind, lapply(csv_list, function(x) read.csv(x, header=TRUE, stringsAsFactors = FALSE))) + + app_file <- "upd_pmab_gr_appl_case_biblog.tsv" + app_each <- sapply(app_file,read.csv,fileEncoding = "utf8", header = TRUE,sep = "", simplify=FALSE) + app_select <- select(.data = app_each ,2, 20, 28, 43) + app <- bind_rows(app,app_select) + + ?bind_rows + setwd(defordir) + } Error in `select()`: ! `select()` doesn't handle lists. Run `rlang::last_error()` to see where the error occurred.

該当のソースコード

現在のコード(10/25(月)時点)

R

1ibrary(tidyverse) 2defrodir <- "C://Users//yusuk//OneDrive ...//after defrost" 3setwd(defrodir) #フォルダ群があるディレクトリに異動 4 5#お目当てのファイルを統合して読み込む 6app_file <- "upd_pmab_gr_appl_case_biblog.tsv" #お目当てのファイル名を指定 7app_filelist <- Sys.glob(file.path(defrodir, "*", app_file),dirmark = TRUE) #各フォルダに入ってるお目当てのファイルを捕捉し、リストにする 8app <- app_filelist %>% 9 map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% #各ファイルを読み込み 10 mutate(abct_clmt_atty_id = as.character(abct_clmt_atty_id)) %>% #エラーが出る列を文字列化 11 select(2, 20, 28, 43) #目当ての列を指定 12 13 14

※修正過程のコード(10/16(金)時点)

R

1app_file <- "upd_pmab_gr_appl_case_biblog.tsv" #お目当てのファイル名を指定 2app_filelist <- Sys.glob(file.path(defrodir, "*", "JPWAP", app_file),dirmark = TRUE) #各フォルダに入ってるお目当てのファイルを捕捉し、リストにする 3app <- app_filelist %>% 4 map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% #各ファイルを読み込み 5 mutate(abct_clmt_atty_id = as.character(abct_clmt_atty_id)) %>% 6 select(2, 20, 28, 43) #目当ての列を指定 7

※元々のコード(10/14(金)投稿時)

R

1 2defrodir <- "C://Users//yusuk//OneDrive ...//after defrost" 3setwd(defrodir) #フォルダ群が入っているディレクトリを指定。 4 5 file_list <- list.files(defrodir) #フォルダのリストを作成 6 app = NA #各データを統合するオブジェクトを作成 7 8 library(dplyr) 9 10for (file in 1:length(file_list)#各フォルダに入っている指定のファイルを読み込み、オブジェクトに縦方向に統合){ 11 targetdir <-sprintf("%s//%s//%s",defrodir,basename(file_list[file]),"JPWAP") 12 setwd(targetdir) #二個下の階層のディレクトリに移動しファイルを読み込む準備 13 14 15 app_file <- "upd_pmab_gr_appl_case_biblog.tsv" #指定ファイルの名前を指定 16 app_each <- sapply(app_file,read.csv,fileEncoding = "utf8", header = TRUE,sep = "", simplify=FALSE) #目当てのファイルを読み込み 17 app_select <- select(.data = app_each ,2, 20, 28, 43) #目当ての列のみ選択して読み込み 18 app <- bind_rows(app,app_select) #統合先のオブジェクトに縦方向に結合 19 20 21 setwd(defrodir) #二個上の元のディレクトリに戻る。これを全てのフォルダで繰り返す。 22}

試したこと

現在(10/25(月)時点)
当初は、ディレクトリ構造が
フォルダ群があるディレクトリ>>日付由来の名前のフォルダ>>JPWAP>>お目当てのファイルを含むたくさんのファイル
だったのですが、

現在は変更し、
フォルダ群があるディレクトリ>>日付由来の名前のフォルダ>>お目当てのファイルを含むたくさんのファイル
となっています。

また、10/16(金)のmelianさんのアドバイスに基づいて、使用したい列があるか無いか、お目当てのファイルを確認しようとしたのですが、ファイルが重すぎて確認できませんでした。

※(10/16(金)時点)
いくつか試行錯誤してみたものを、何ら頭の手掛かりになればいいと思って載せておきます。

mutate()の中のabct_clmt_atty_idを文字列にしてみました。

R

1defrodir <- "C://Users//yusuk//OneDrive ...//after defrost" 2app_file <- "upd_pmab_gr_appl_case_biblog.tsv" #お目当てのファイル名を指定 3app_filelist <- Sys.glob(file.path(defrodir, "*", "JPWAP", app_file),dirmark = TRUE) #各フォルダに入ってるお目当てのファイルを捕捉し、リストにする 4app <- app_filelist %>% 5 map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% #各ファイルを読み込み 6 mutate("abct_clmt_atty_id" = as.character("abct_clmt_atty_id")) %>% 7 select(2, 20, 28, 43) #目当ての列を指定 8 9

これを行ったところ、以下のエラーになりました。

>defrodir <- "C://Users//yusuk//OneDrive ...//after defrost" > app <- app_filelist %>% + map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% #各ファイルを読み込み + mutate("abct_clmt_atty_id" = as.character("abct_clmt_atty_id")) %>% + select(2, 20, 28, 43) #目当ての列を指定 Error in `select()`: ! Can't subset columns past the end. i Locations 2, 20, 28, and 43 don't exist. i There is only 1 column. Run `rlang::last_error()` to see where the error occurred.

mutate()をコメントアウトしてみました。

R

1defrodir <- "C://Users//yusuk//OneDrive ...//after defrost" 2app_file <- "upd_pmab_gr_appl_case_biblog.tsv" #お目当てのファイル名を指定 3app_filelist <- Sys.glob(file.path(defrodir, "*", "JPWAP", app_file),dirmark = TRUE) #各フォルダに入ってるお目当てのファイルを捕捉し、リストにする 4app <- app_filelist %>% 5 map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% #各ファイルを読み込み 6 #mutate(abct_clmt_atty_id = as.character(abct_clmt_atty_id)) %>% 7 select(2, 20, 28, 43) #目当ての列を指定 8 9

これをすると以下のエラーが出ました。

>defrodir <- "C://Users//yusuk//OneDrive ...//after defrost" > app <- app_filelist %>% + map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% #各ファイルを読み込み + #mutate(abct_clmt_atty_id = as.character(abct_clmt_atty_id)) %>% # + select(2, 20, 28, 43) #目当ての列を指定 Error in `select()`: ! Can't subset columns past the end. i Locations 2, 20, 28, and 43 don't exist. i There are only 0 columns. Run `rlang::last_error()` to see where the error occurred.

excelの方で該当のファイルを見てみても、0列ではありませんでした。列として読み込めていないのでしょうか。

なお、こちらを実行すると、

R

1Sys.glob(file.path(defrodir, "*", "JPWAP", app_file),dirmark = TRUE) #各フォルダに入ってるお目当てのファイルを捕捉し、リストにする

すると、以下の結果になりました

character(0)

パスの作成は上手くいっているのですが、ファイルが捕捉されません。確認してみたのですが、各"JPWAP"の中に該当ファイルは存在していました。

10/15修正
melianさんよりこちらの回答を頂き、実行しました。

R

1library(tidyverse) 2 3defrodir <- "C://Users//yusuk//OneDrive -...//after defrost" 4 5app_file <- "upd_pmab_gr_appl_case_biblog.tsv" 6file_list <- Sys.glob(file.path(defrodir, "*", "JPWAP", app_file)) 7app <- file_list %>% 8 map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% 9 select(2, 20, 28, 43) 10 11

結果、以下のエラーが出ました。

> defrodir <- "C://Users//yusuk//OneDrive...//after defrost" > app_file <- "upd_pmab_gr_appl_case_biblog.tsv" > file_list <- Sys.glob(file.path(defrodir, "*", "JPWAP", app_file)) > app <- file_list %>% + map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% + select(2, 20, 28, 43) Error in `dplyr::bind_rows()`: ! Can't combine `abct_clmt_atty_id` <character> and `abct_clmt_atty_id` <double>. Run `rlang::last_error()` to see where the error occurred. Warning messages: 1: One or more parsing issues, see `problems()` for details 2: One or more parsing issues, see `problems()` for details 3: One or more parsing issues, see `problems()` for details

bind_row()を使っていないのにこのエラーが出ました。原因が分からず何から手を付けるかわからない状態です...

補足情報(FW/ツールのバージョンなど)

OSはwindowsを使っています。

自分のコードを実行する際もmelianさんのコードを実行する際も、かなり時間がかかっていました。自分のパソコンのスペックの低さが原因か、それともR環境の設定が原因か、データの主さが原因かはわかりませんが...

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

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

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

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

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

guest

回答2

0

自己解決

R

1app <- app_filelist %>% 2 read_tsv(., locale=locale(encoding="UTF-8"),show_col_types=FALSE) %>% #各ファイルを読み込み 3 select(2, 28)%>% #必要な行を選択 20,43 4 map_df(~.) %>% #表を縦方向に統合 5 distinct(app_num,.keep_all=TRUE) # abaa_pref_cd, abii_inventor_addr, abae_appl_atty_addr #入力した行をキーとした重複を削除。 6

こちらで何故か上手くいきました。
なぜエラーが出なくなったのかは分かりませんが...

投稿2022/11/17 10:56

maltines

総合スコア12

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

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

0

Sys.glob()tidyverse を使うと以下の様になります。動作確認はしていないので、想定通りの結果になるのかどうか試してみて下さい。

r

1library(tidyverse) 2 3defrodir <- "C://Users//yusuk//OneDrive ...//after defrost" 4app_file <- "upd_pmab_gr_appl_case_biblog.tsv" 5file_list <- Sys.glob(file.path(defrodir, "*", "JPWAP", app_file)) 6app <- file_list %>% 7 map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE) %>% 8 mutate(abct_clmt_atty_id = as.character(abct_clmt_atty_id))) %>% 9 select(2, 20, 28, 43)

投稿2022/10/14 18:56

編集2022/10/15 12:40
melian

総合スコア19703

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

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

maltines

2022/10/15 12:10 編集

ご回答ありがとうございます。実行してみたところ、以下のエラーが出ました。 ``` > defrodir <- "C://Users//yusuk//OneDrive ...//after defrost" > app_file <- "upd_pmab_gr_appl_case_biblog.tsv" > file_list <- Sys.glob(file.path(defrodir, "*", "JPWAP", app_file)) > app <- file_list %>% + map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% + select(2, 20, 28, 43) Error in `dplyr::bind_rows()`: ! Can't combine `abct_clmt_atty_id` <character> and `abct_clmt_atty_id` <double>. Run `rlang::last_error()` to see where the error occurred. Warning messages: 1: One or more parsing issues, see `problems()` for details 2: One or more parsing issues, see `problems()` for details 3: One or more parsing issues, see `problems()` for details ``` bind_row()を使わなかったのにこのエラーが出たのですが...原因がわからない状態です...
melian

2022/10/15 12:42 編集

map_df() の内部で bind_rows() が使われています。abct_clmt_atty_id 列の値を全て character 型に変換する処理を追加してみましたので確認してみて下さい。
maltines

2022/10/16 10:21

ご返信ありがとうございます。修正いただいたコードを実装したところ、以下のエラーが出ました。 ``` >defrodir <- "C://Users//yusuk//OneDrive ...//after defrost" >app <- app_filelist %>% + map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% #各ファイルを読み込み + mutate(abct_clmt_atty_id = as.character(abct_clmt_atty_id)) %>% + select(2, 20, 28, 43) #目当ての列を指定 Error in `mutate()`: ! Problem while computing `abct_clmt_atty_id = as.character(abct_clmt_atty_id)`. Caused by error: ! object 'abct_clmt_atty_id' not found Run `rlang::last_error()` to see where the error occurred. ``` 昨日のエラーで出た列に対応すると見つからないとなっています...何故なんでしょうか... お手数ですがご検討いただければ幸いです。他にも変な点がありましたので修正させていただきます。
melian

2022/10/16 10:55

'abct_clmt_atty_id' not found ということは、いずれかの upd_pmab_gr_appl_case_biblog.tsv に、abct_clmt_atty_id 列の無いものがある、ということになります。回答に書きましたコードは、全ての upd_pmab_gr_appl_case_biblog.tsv の列名が同じであるという前提なのです。
maltines

2022/10/16 12:42

ご回答ありがとうございます。 修正した者にも書いたのですが、いったんmutate()を除いて走らせると ``` >defrodir <- "C://Users//yusuk//OneDrive ...//after defrost" > app <- app_filelist %>% + map_df(~read_tsv(., locale=locale(encoding="UTF-8"), show_col_types=FALSE)) %>% #各ファイルを読み込み + #mutate(abct_clmt_atty_id = as.character(abct_clmt_atty_id)) %>% # + select(2, 20, 28, 43) #目当ての列を指定 Error in `select()`: ! Can't subset columns past the end. i Locations 2, 20, 28, and 43 don't exist. i There are only 0 columns. Run `rlang::last_error()` to see where the error occurred ``` と出ました。確認すると、app_filelistが'charactar(empty)'となっていました。 これはどういう事でしょうか。実際のディレクトリを確認してもupd_pmab_gr_appl_case_biblog.tsvは存在していました。 お手数おかけして申し訳ありません。
melian

2022/10/16 12:47 編集

Locations 2, 20, 28, and 43 don't exist. と表示されていますので、2列目, 20列目,28列目,43列目のないファイルがどこかにあるということになります。 ※ upd_pmab_gr_appl_case_biblog.tsv ファイルそのものではなく、その中身が問題なのだと思います。
maltines

2022/10/25 11:12

その後melianさんや自分での試行錯誤をして、元のエラーが発生たため、修正しました。お時間があればご指摘お願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問