4

非常に明白な答えがあると思っていたので申し訳ありませんが、ネット上で何も見つかりません...

欠損値が空白の非常に大きなデータセットを取得することがよくあります (要するに)

#Some description of the dataset
#cover x number of lines
31   3213 313   64    63
31   3213 313   64    63
31   3213 313   64    63
31   3213 313   64    63
31   3213 313   64    63
12   178        190   865
532  31   6164  68
614       131   864   808

すべての空白を、たとえば -999 に置き換えたいと思います。そのような読み取りテーブルを使用する場合

dat = read.table('file.txt',skip=2)

エラーメッセージが表示されます

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
line 6 did not have 5 elements

ファイルをデータフレームとして開いて実行できます

dat = data.frame('file.txt',skip=2)
is.na(rad1) = which(rad1 == '')

しかし、データフレームを読み取るときに上位2行をスキップする方法がわからず(たとえば、「スキップ」に相当)、どこにも答えが見つからなかったため、それが機能するかどうかわかりません。誰でも助けてもらえますか?

ありがとう。

4

1 に答える 1

14

各列の幅がわかっている場合は、使用できますread.fwf

例えば

> dat <- read.fwf('temp.txt', skip=2, widths=c(5,5,6,6,6))
> dat
   V1   V2   V3  V4  V5
1  31 3213  313  64  63
2  31 3213  313  64  63
3  31 3213  313  64  63
4  31 3213  313  64  63
5  31 3213  313  64  63
6  12  178   NA 190 865
7 532   31 6164  68  NA
8 614   NA  131 864 808

値を任意の値に置き換えるのは簡単NAですが、R には NA 値を処理する優れた方法がたくさんあるため、これは悪い考えです。

たとえば、列 2 の平均を取るには、次を使用します。

mean(dat$V2, na.rm=TRUE)
[1] 163.4286

Rには、欠損データを処理するための他の機能があります。たとえば、na.omit()データが欠落している行を完全に削除するために使用できます。

> na.omit(dat)
  V1   V2  V3 V4 V5
1 31 3213 313 64 63
2 31 3213 313 64 63
3 31 3213 313 64 63
4 31 3213 313 64 63
5 31 3213 313 64 63
于 2013-01-24T09:45:40.770 に答える