[英]Conditional manipulation of NAs in R
我有一个包含对不同个体的观察的数据框。
第一列包含个人的姓名,随后的列包含观察到的状态,而每一列代表一个月。
在观察期内,个人出生,导致NA
观察他们出生之前,他们离开的人口在过去的观察显示的原因,导致NA
小号继上观察。 我想将第一次观察之前的NA
更改为某个值,并将人口离开后的NA
更改为最后一次观察。
由于数据框包含 30,000 多行和大约 400 列,我正在寻找一种有效的方法,而不是基本的ifelse()
方法。
zoo
包中的na.locf()
通过向前携带最后一个非 NA 值来替换 NA。 (不仅用于尾随NA,还用于向量中间的 NA - 我假设您没有那些。)默认情况下,它省略了前导 NA。 您可以用指定的值替换它们,如下所示:
> library(zoo)
> xx <- c(NA, NA, 1, NA, 2, 3, NA, NA)
> replacement.for.initial.NAs <- -1
> foo <- min(which(!is.na(xx)))
> c(rep(replacement.for.initial.NAs,foo-1),na.locf(xx))
[1] -1 -1 1 1 2 3 3 3
你可以在你的个人上循环这个。 可能有一种更聪明的方法涉及apply()
和朋友来为数据结构的每一行或每一列执行此过程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.