R - 删除NA值

时间:2014-02-26 11:20:59

标签: r zoo

我在R中有一张大表,有很多NA值。

第一行:

"tm1" "score1" "score2" "score3" "score4" "score5" "score6" "score7" "score8" "score9" "score10" "score11" "score12" "score13" "score14" "score15" "score16" "score17" "score18" "score19" "score20" "score21" "score22" "score23" "score24" "score25" "score26" "score27" "score28" "score29" "score30" "score31" "score32" "score33" "score34" "score35" "score36" "score37" "score38" "score39" "score40" "score41" "score42" "score43" "score44" "score45" "score46" "score47" "score48" "score49" "score50" "score51" "score52" "score53" "score54" "score55" "score56" "score57" "score58" "score59" "score60" "score61" "score62" "score63" "score64" "score65" "score66" "score67" "score68" "score69" "score70" "score71" "score72" "score73" "score74" "score75" "score76" "score77" "score78" "score79" "score80" "score81" "score82" "score83" "score84" "score85" "score86" "score87" "score88" "score89" "score90" "score91" "score92" "score93" "score94" "score95" "score96" "score97" "score98" "score99" "score100"
"1" 7289 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 35177.5 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"2" 7290 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 37149 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"3" 7296 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 33172.3 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"4" 7297 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 45095.7 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"5" 7298 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 44116.1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"6" 7300 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 37162.1 NA 36188.6 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"7" 7302 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 35188 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"8" 7303 NA NA NA NA NA NA NA NA 37146.9 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"9" 7304 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 41134.4 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 32172.8 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 35154.6 NA NA NA NA NA NA
"10" 7306 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 38147 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 36155.7 NA NA 46104.1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
"11" 7308 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 33167.1 NA 27211.4 NA NA NA NA NA NA NA NA NA NA NA NA NA
"12" 7310 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 46097.1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

我想用之前已知的值替换每个scoreX NA值。我想用动物园包中的locf做到这一点:

newdata$score1   <- zoo::na.locf(newdata$score1 )
newdata$score2   <- zoo::na.locf(newdata$score2 )
newdata$score3   <- zoo::na.locf(newdata$score3 )
newdata$score4   <- zoo::na.locf(newdata$score4 )
newdata$score5   <- zoo::na.locf(newdata$score5 )
newdata$score6   <- zoo::na.locf(newdata$score6 )
newdata$score7   <- zoo::na.locf(newdata$score7 )
newdata$score8   <- zoo::na.locf(newdata$score8 )
newdata$score9   <- zoo::na.locf(newdata$score9 )
newdata$score10  <- zoo::na.locf(newdata$score10    )
newdata$score11  <- zoo::na.locf(newdata$score11    )
newdata$score12  <- zoo::na.locf(newdata$score12    )
newdata$score13  <- zoo::na.locf(newdata$score13    )
newdata$score14  <- zoo::na.locf(newdata$score14    )
newdata$score15  <- zoo::na.locf(newdata$score15    )
newdata$score16  <- zoo::na.locf(newdata$score16    )
newdata$score17  <- zoo::na.locf(newdata$score17    )
newdata$score18  <- zoo::na.locf(newdata$score18    )
newdata$score19  <- zoo::na.locf(newdata$score19    )
newdata$score20  <- zoo::na.locf(newdata$score20    )
newdata$score21  <- zoo::na.locf(newdata$score21    )
newdata$score22  <- zoo::na.locf(newdata$score22    )
newdata$score23  <- zoo::na.locf(newdata$score23    )
newdata$score24  <- zoo::na.locf(newdata$score24    )
newdata$score25  <- zoo::na.locf(newdata$score25    )
newdata$score26  <- zoo::na.locf(newdata$score26    )
newdata$score27  <- zoo::na.locf(newdata$score27    )
newdata$score28  <- zoo::na.locf(newdata$score28    )
newdata$score29  <- zoo::na.locf(newdata$score29    )
newdata$score30  <- zoo::na.locf(newdata$score30    )
newdata$score31  <- zoo::na.locf(newdata$score31    )
newdata$score32  <- zoo::na.locf(newdata$score32    )
newdata$score33  <- zoo::na.locf(newdata$score33    )
newdata$score34  <- zoo::na.locf(newdata$score34    )
newdata$score35  <- zoo::na.locf(newdata$score35    )
newdata$score36  <- zoo::na.locf(newdata$score36    )
newdata$score37  <- zoo::na.locf(newdata$score37    )
newdata$score38  <- zoo::na.locf(newdata$score38    )
newdata$score39  <- zoo::na.locf(newdata$score39    )
newdata$score40  <- zoo::na.locf(newdata$score40    )
newdata$score41  <- zoo::na.locf(newdata$score41    )
newdata$score42  <- zoo::na.locf(newdata$score42    )
newdata$score43  <- zoo::na.locf(newdata$score43    )
newdata$score44  <- zoo::na.locf(newdata$score44    )
newdata$score45  <- zoo::na.locf(newdata$score45    )
newdata$score46  <- zoo::na.locf(newdata$score46    )
newdata$score47  <- zoo::na.locf(newdata$score47    )
newdata$score48  <- zoo::na.locf(newdata$score48    )
newdata$score49  <- zoo::na.locf(newdata$score49    )
newdata$score50  <- zoo::na.locf(newdata$score50    )
newdata$score51  <- zoo::na.locf(newdata$score51    )
newdata$score52  <- zoo::na.locf(newdata$score52    )
newdata$score53  <- zoo::na.locf(newdata$score53    )
newdata$score54  <- zoo::na.locf(newdata$score54    )
newdata$score55  <- zoo::na.locf(newdata$score55    )
newdata$score56  <- zoo::na.locf(newdata$score56    )
newdata$score57  <- zoo::na.locf(newdata$score57    )
newdata$score58  <- zoo::na.locf(newdata$score58    )
newdata$score59  <- zoo::na.locf(newdata$score59    )
newdata$score60  <- zoo::na.locf(newdata$score60    )
newdata$score61  <- zoo::na.locf(newdata$score61    )
newdata$score62  <- zoo::na.locf(newdata$score62    )
newdata$score63  <- zoo::na.locf(newdata$score63    )
newdata$score64  <- zoo::na.locf(newdata$score64    )
newdata$score65  <- zoo::na.locf(newdata$score65    )
newdata$score66  <- zoo::na.locf(newdata$score66    )
newdata$score67  <- zoo::na.locf(newdata$score67    )
newdata$score68  <- zoo::na.locf(newdata$score68    )
newdata$score69  <- zoo::na.locf(newdata$score69    )
newdata$score70  <- zoo::na.locf(newdata$score70    )
newdata$score71  <- zoo::na.locf(newdata$score71    )
newdata$score72  <- zoo::na.locf(newdata$score72    )
newdata$score73  <- zoo::na.locf(newdata$score73    )
newdata$score74  <- zoo::na.locf(newdata$score74    )
newdata$score75  <- zoo::na.locf(newdata$score75    )
newdata$score76  <- zoo::na.locf(newdata$score76    )
newdata$score77  <- zoo::na.locf(newdata$score77    )
newdata$score78  <- zoo::na.locf(newdata$score78    )
newdata$score79  <- zoo::na.locf(newdata$score79    )
newdata$score80  <- zoo::na.locf(newdata$score80    )
newdata$score81  <- zoo::na.locf(newdata$score81    )
newdata$score82  <- zoo::na.locf(newdata$score82    )
newdata$score83  <- zoo::na.locf(newdata$score83    )
newdata$score84  <- zoo::na.locf(newdata$score84    )
newdata$score85  <- zoo::na.locf(newdata$score85    )
newdata$score86  <- zoo::na.locf(newdata$score86    )
newdata$score87  <- zoo::na.locf(newdata$score87    )
newdata$score88  <- zoo::na.locf(newdata$score88    )
newdata$score89  <- zoo::na.locf(newdata$score89    )
newdata$score90  <- zoo::na.locf(newdata$score90    )
newdata$score91  <- zoo::na.locf(newdata$score91    )
newdata$score92  <- zoo::na.locf(newdata$score92    )
newdata$score93  <- zoo::na.locf(newdata$score93    )
newdata$score94  <- zoo::na.locf(newdata$score94    )
newdata$score95  <- zoo::na.locf(newdata$score95    )
newdata$score96  <- zoo::na.locf(newdata$score96    )
newdata$score97  <- zoo::na.locf(newdata$score97    )
newdata$score98  <- zoo::na.locf(newdata$score98    )
newdata$score99  <- zoo::na.locf(newdata$score99    )
newdata$score100     <- zoo::na.locf(newdata$score100   )

我收到错误,可能是因为第一个值没有以前的值!

$<-.data.frame中的错误(*tmp*,“得分1”,值= c(32189.8,32189.8,:   替换有459744行,数据有459772

我想我可以重新运行我的实验并为每次运行添加一个漂亮的tm1 = 0值,但我想知道是否有办法绕过这个。比方说,保留没有先前值的行的NA值?

1 个答案:

答案 0 :(得分:1)

如果第一个NA前面没有值,你肯定必须设置一些默认值。在下面的示例中,我将其设置为0。

# create new data.frame with score0 = 0 as first column
newdata <- data.frame(newdata$tm1, score0=rep(0,nrow(newdata)), newdata[,-1])

# apply function na.locf to every row
a <- t(apply(newdata[,-c(1)], 1, na.locf))

# append to original data.frame (this will keep the column score0)
newdata[,2:ncol(newdata)] <- a