使用-9999跳过单元格并执行多次回归

时间:2015-03-26 21:48:47

标签: r

我想做一个多元回归,其中SMDI是我的因变量,其他是我的自变量。这是数据。

d <- read.table(text="SMDI  ET  PRCP    ET_Ch   PRCP_Ch
    -9999   -9999   -9999   -9999   -9999
    -9999   -9999   -9999   -9999   -9999
    -9999   621 11.20291    -111    -58.568
    1.067062    -9999   9.049039    -9999   -61.8191
    2.647571    551 7.778518    -113    -61.5458
    0.962622    475 10.32385    -145    -54.0697
    -9999   -9999   13.5475 -9999   -40.8121
    -9999   -9999   13.60227    -9999   -45.3488
    -9999   -9999   -9999   -9999   -9999
    -9999   -9999   18.98804    -9999   -45.5135
    -9999   594 14.24568    -119    -61.0664
    1.061673    471 10.34461    -129    -71.1407
    0.535265    420 9.74108 -137    -73.3488
    0.010328    420 10.97725    -144    -69.031
    0.132918    418 11.02256    -135    -60.2483
    0.647663    397 11.98954    -134    -57.1096
    -9999   -9999   12.0852 -9999   -46.0085
    -9999   -9999   23.51045    -9999   -46.0736
    -9999   691 17.06862    -108    -63.3729",
header=TRUE)

回归代码

lm(SMDI ~ ET + ET_Ch + PRCP + PRCP_Ch, data=d)

我的数据使用-9999作为丢失的代码,因此,我得到的结果不正确。我应该添加什么代码,以便如果表中的任何单元格包含-9999,它会跳过该代码并仅考虑不包含-9999值的单元格?

1 个答案:

答案 0 :(得分:2)

我相信您希望根据-9999值对数据进行子集化(即删除任何行值为-9999的行。如果这是真的,则以下代码将执行此操作。有人可能会建议{{ 1}}或dplyr解决更清洁的问题。

data.table

如果您想将-9999视为缺失值,则只需将-9999更改为inds=unique(unlist(apply(d,2,function(x){which(x == -9999)}))) d2 = d[-inds,] 并设置相应的NA项。

na.action