0

Rでcsvファイルを行ごとにスキャンして、「ターゲット」という単語を含む行を除外できるようにしたいと思います。

問題は、データがさまざまな場所から取得され、「ターゲット」という単語がデータフレームのさまざまな列に表示される可能性があることです。

したがって、この文字列を検索する行が関数に必要です。この文字列が存在しない場合は、その行を新しいデータフレームに追加します(新しいcsvとして書き出します)。

ありとあらゆるものがありがたいことに受け取ったのを助けます。

4

3 に答える 3

5

アンドリーのコメントは、おそらくほとんどのユーザーがこれにアプローチする方法ですが、段階的な読書でこれを行いたい場合は、これを試すことができます:

  1. を使用してcsvを読み込みreadLines、テキストターゲットが空白の行を作成します。

    temp = gsub(".*target.*", "", readLines("test.csv"))
    
  2. read.tableに変換するためtempに使用しdata.frameます。テキストターゲットを持つすべての行が空白になっているため、デフォルトblank.lines.skip=TRUEのinread.tableは、残りのデータをとして正しく読み取る必要がありますdata.frame

    read.table(text=temp, sep=",", header=TRUE)
    
于 2012-07-24T16:54:22.380 に答える
3

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)){
于 2012-07-24T16:50:44.893 に答える
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
于 2012-07-24T18:06:15.420 に答える