用r中的值替换数据集中的空格

时间:2013-01-24 09:30:30

标签: r

道歉,因为我认为会有一个非常明显的答案,但我在网上找不到任何东西......

我经常会得到非常大的数据集,其中缺失值为空,例如(简而言之)

#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 == '')

但我不知道它是否会起作用,因为我不知道在阅读数据帧时如何跳过前两行(例如相当于“跳过”),我无法在任何地方找到答案。有人可以帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:14)

如果您知道每列的宽度,则可以使用read.fwf

e.g。

> 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值的好方法。

例如,要取第二列的平均值,请使用:

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