拡張子が.circlesの60個のファイルを含むフォルダがあります。すべてがテキストファイルです。ファイルからデータを読み込み、csvで貼り付けてください。
ファイル名:私は2つのカラムを持つ単一のCSVという名前train.csv
に変換したい
circle17: 306 281
circle16: 335 253
:
内容239.circlesユーザーIDおよび予測を
UserIdの行では、ファイル名を取得する必要があります。例:239と予測の行には、円で区切られた値を取得する必要があります。例:306 281; 335 253
これを@Adamのおかげで今私が取得しています、私がこれまでに行ったこと
setwd("D:/r/social/Expt/Training")
files <- list.files(pattern = "*.circles")
readFn <- function(i) {
f <- readLines(i,n=-1,con)
f <-sub("^[^:]*","",f)
f <- paste(f, collapse=';')
return(f)
}
all.files <- lapply(files, readFn)
output <- do.call(rbind, all.files)
write.csv(output,"train.csv")
出力は
1です:306 281; :335 253
私はそれを239 306 281; 335 253としたいと思います。ここで、カラム1の下には239(私はファイル239.circlesを読んでいるので)を取得し、カラム2の下に私は得るべきです:306 281; :335 253:;それぞれの行に変数の長さがあるので、それを構築するために理にかなって
:
all_files <- lapply(files, readLines)
all_dat <- lapply(all_files, function(x)read.table(text=x)[2:3])
userid <- gsub(".circles", "", files) #this step extract the UserID based the "X.circle" file names
all_dat <- lapply(1:length(all_dat), function(x) all_dat[[x]] %>% mutate(UserId = userid[x]))
output <- do.call(rbind, all_dat)
write.csv(output,"trains.csv")
編集(追加なし後)
代わりの書き込みforループなぜマップやlapplyを使用しないのですか? https://rud.is/b/2016/07/26/use-quick-formula-functions-in-purrrmap-base-vs-tidtyverse-idiom-comparisonsexamples/ – biomiha
あなたの手順には1つの問題があると思います。 'for'ループ):あなたのループに' i'が入るたびに 'trains.csv'ファイルを書いて、古いものを上書きします –
私の以前の解決策を削除し、以前のループに置き換えてください。私はあなたの行動が早い段階で動いていると思ったが、@wolf_wueが正しく指摘したように、あなたのループ内の 'UserID'を推測していないことを確認しなかった。私は以下の解決策を追加しました。これはうまくいくはずです。 –