Rでcsvファイルを行ごとにスキャンして、「ターゲット」という単語を含む行を除外できるようにしたいと思います。
問題は、データがさまざまな場所から取得され、「ターゲット」という単語がデータフレームのさまざまな列に表示される可能性があることです。
したがって、この文字列を検索する行が関数に必要です。この文字列が存在しない場合は、その行を新しいデータフレームに追加します(新しいcsvとして書き出します)。
ありとあらゆるものがありがたいことに受け取ったのを助けます。
アンドリーのコメントは、おそらくほとんどのユーザーがこれにアプローチする方法ですが、段階的な読書でこれを行いたい場合は、これを試すことができます:
を使用してcsvを読み込みreadLines
、テキストターゲットが空白の行を作成します。
temp = gsub(".*target.*", "", readLines("test.csv"))
read.table
に変換するためtemp
に使用しdata.frame
ます。テキストターゲットを持つすべての行が空白になっているため、デフォルトblank.lines.skip=TRUE
のinread.table
は、残りのデータをとして正しく読み取る必要がありますdata.frame
。
read.table(text=temp, sep=",", header=TRUE)
readLinesを使用します。
lines <- readLines(file)
n.lines <- length(lines)
vec.1 <- rep(0, n.lines)
vec.2 <- rep(0, n.lines)
# more vectors as necessary
counter <- 0
for (i in 1:n.lines){
this.line <- strplit(lines[i], ",")
if ("target" %in% this.line) next
counter <- counter + 1
vec.1[counter] <- this.line[1]
vec.2[counter] <- this.line[2]
# etc.
}
df <- data.frame(vec.1[1:counter], vec.2[1:counter])
ファイルにヘッダーがある場合は、n.linesを少し変更し、forループのインデックスを変更する必要がある場合があります。2行は次のように変更されます。
n.lines <- length(lines) - 1
と
for(i in 2:(n.lines+1)){
呼び出しfrom.readLines <- readLines(filename)
てから、ターゲット文字列を含まない行をサブ選択しますdata <- read.csv(text = from.readLines[-grep('target', from.readLines)], header = F)
。
(ファイルが巨大な場合)それを行うより速い方法は、grep -v 'target' original.csv > new.csv
最初にコマンドラインで実行read.csv(new.csv, ...)
してからで実行することR
です。
とにかく、
> #Without header
> from.readLines <- c('afaf,afasf,target', 'afaf,target,afasf', 'dagdg,asgst,sagga', 'dagdg,dg,sfafgsgg')
> data <- read.csv(text = from.readLines[-grep('target', from.readLines)], header = F)
> print(data)
V1 V2 V3
1 dagdg asgst sagga
2 dagdg dg sfafgsgg
>
> #With header
> from.readLines <- c('var1,var2,var3', 'afaf,afasf,target', 'afaf,target,afasf', 'dagdg,asgst,sagga', 'dagdg,dg,sfafgsgg')
> data <- read.csv(text = from.readLines[-(grep('target', from.readLines[-1]) + 1)])
> print(data)
var1 var2 var3
1 dagdg asgst sagga
2 dagdg dg sfafgsgg