繁体   English   中英

R 中 NA 的条件操作

[英]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.

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