以下是我的数据集的一部分:
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
我想做什么:
非常感谢!
答案 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))