R:如何用ID替换特定年份的NA?

时间:2016-01-29 20:10:57

标签: r

以下是我的数据集的一部分:

    ID year wf_income mrg_status mrg_tenure edu_wf
    2  1985     0       1       43       NA
    2  1986   3000      1       NA       NA
    2  1987   5200      1       NA       NA
    2  1988     0       1       NA       NA
    2  1989    360      1       NA        5
    3  1985    2600     1       18       NA
    3  1986    5365     1       NA       NA
    3  1987     0       1       NA       NA
    3  1988    5700     1       NA       NA
    3  1989     0       0       NA        9

我想做什么:

for(i in ID),如果“edu_wf”为NA,则在1989年将“edu_wf”替换为“edu_wf”记录。例如,对于ID = 1,将1985年取代edu_wf:1988年取5

非常感谢!

2 个答案:

答案 0 :(得分:1)

我认为这就是#1

所需要的

df $ edu_wf< - ifelse(is.NA(df $ edu_wf),1988,df $ edu_wf)

根据您的澄清,我将以下内容工作:

library(dplyr)

ID <- c(2,2,2,2,2,3,3,3,3,3)
year <- c(1985,1986,1987,1988,1989,1985,1986,1987,1988,1989)
edu_wf <- c(NA,NA,NA,NA,5,NA,NA,NA,NA,9)
df <- data.frame(ID, year,edu_wf)
fn <- function(x){ rep(na.omit(x),length(x)) }
df2 <- ddply(df, "ID", transform, edu_wf=fn(edu_wf))

df
df2

产地:

> df
   ID year edu_wf
1   2 1985     NA
2   2 1986     NA
3   2 1987     NA
4   2 1988     NA
5   2 1989      5
6   3 1985     NA
7   3 1986     NA
8   3 1987     NA
9   3 1988     NA
10  3 1989      9
> df2
   ID year edu_wf
1   2 1985      5
2   2 1986      5
3   2 1987      5
4   2 1988      5
5   2 1989      5
6   3 1985      9
7   3 1986      9
8   3 1987      9
9   3 1988      9
10  3 1989      9

有关详细信息,请参阅hadly的plyr软件包上的documentation,特别是split,apply,combine范例。

答案 1 :(得分:0)

这可能是您想要的#1,但它不会改变数据......

require(dplyr)

dat %>% mutate(edu_wf = ifelse(is.na(edu_wf),dat[which(dat[,2] %in% 1988)[1],"edu_wf"],edu_wf))