8

22268行×2521列のファイルがあります。このコード行を使用してファイルを読み込もうとすると、次のようになります。

file <- read.table(textfile, skip=2, header=TRUE, sep="\t", fill=TRUE, blank.lines.skip=FALSE)

しかし、私は13024行BY 2521列しか読み込まれず、次のエラーが発生します。

警告メッセージ:scan(file、what、nmax、sep、dec、quote、skip、nlines、na.strings、:読み取られたアイテムの数が列の数の倍数ではありません

また、このコマンドを使用して、列の数が正しくない行を確認しました。

x <-count.fields(textfile, sep="\t", skip=2)
incorrect <- which(x != 2521)

正しくなかった約20行のリストを取得しました。

これらの行をNA値で埋める方法はありますか?

これがread.table関数の「fill」パラメーターの機能だと思いましたが、そうではありません。

また

「不正な」変数で識別されるこれらの行を無視する方法はありますか?

4

1 に答える 1

5

を使用readLines()してデータを入力し、問題のある行を見つけることができます。

    con <- file("path/to/file.csv", "rb")
    rawContent <- readLines(con) # empty
    close(con)  # close the connection to the file, to keep things tidy

その後、見てみましょうrawContent

列数が正しくない行を検索するには、次に例を示します。

    expectedColumns <- 2521
    delim <- "\t"

    indxToOffenders <-
    sapply(rawContent, function(x)   # for each line in rawContent
        length(gregexpr(delim, x)[[1]]) != expectedColumns   # count the number of delims and compare that number to expectedColumns
    ) 

次に、データを読み込みます。

  myDataFrame <- read.csv(rawContent[-indxToOffenders], header=??, sep=delim)
于 2012-12-03T23:09:58.197 に答える