简体   繁体   English

R-删除NA值

[英]R - removing NA values

I have a big table in R with lots of NA values. 我在R中有一张大桌子,上面有很多NA值。

The first lines: 第一行:

"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

I want to replace each scoreX NA value with the previously known value. 我想用以前的已知值替换每个scoreX NA值。 I wanted to do it using locf from the zoo package: 我想使用zoo包中的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   )

I get an error, probably due to the fact the the first values do not have a previous value! 我收到一个错误,可能是由于第一个值没有先前的值!

Error in $<-.data.frame ( *tmp* , "score1", value = c(32189.8, 32189.8, : replacement has 459744 rows, data has 459772 $<-.data.frame*tmp* ,“ score1”,value = c(32189.8,32189.8,:替换有459744行,数据有459772

I guess I could rerun my experiment and add a nice tm1=0 value for each run, but I was wondering if there is a way to circumvent this. 我想我可以重新运行实验并为每次运行添加一个不错的tm1 = 0值,但是我想知道是否有一种方法可以规避这一点。 Say, leave the NA value for the rows that do not have a previous value? 说,为不具有先前值的行保留NA值?

You definitely must set some default value, if there is no value in front of first NA. 如果第一个NA前面没有值,则您一定必须设置一些默认值。 In following example, I set it to 0. 在下面的示例中,我将其设置为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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM