道歉,因为我认为会有一个非常明显的答案,但我在网上找不到任何东西......
我经常会得到非常大的数据集,其中缺失值为空,例如(简而言之)
#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 == '')
但我不知道它是否会起作用,因为我不知道在阅读数据帧时如何跳过前两行(例如相当于“跳过”),我无法在任何地方找到答案。有人可以帮忙吗?
感谢。
答案 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