前提
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環境の設定が原因か、データの主さが原因かはわかりませんが...

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。