我有一个数据框,其中包括5个家庭的20个人。 家庭内的一些人缺少是否拥有医疗卡的数据。 我希望为这些人提供与其家庭内其他人相同的值(而不是NA值),这个值是二进制值0或1。
我尝试了下面的代码,我认为它是正确的一步,但并不完全正确,因为a)如果每个家庭的第一个med_card值为NA,则该代码无法运行; b)它不能替换家庭1中所有人的NA值。
任何指针都将不胜感激,谢谢。
样例数据框。
期望输出。
我尝试了下面的代码,我认为它是正确的一步,但并不完全正确,因为a)如果每个家庭的第一个med_card值为NA,则该代码无法运行; b)它不能替换家庭1中所有人的NA值。
DF<- ddply(df, .(hhold_no), function(df) {df$med_card[is.na(df$med_card)] <- head(df$med_card, na.rm=TRUE); return(df)})
任何指针都将不胜感激,谢谢。
样例数据框。
df
person_id hhold_no med_card
1 1 1 1
2 2 1 1
3 3 1 NA
4 4 1 NA
5 5 1 NA
6 6 2 0
7 7 2 0
8 8 2 0
9 9 2 0
10 10 3 NA
11 11 3 NA
12 12 3 NA
13 13 3 1
14 14 3 1
15 15 4 1
16 16 4 1
17 17 5 1
18 18 5 1
19 19 5 NA
20 20 5 NA
并编写代码使其可用
person_id<-as.numeric(c(1:20))
hhold_no<-as.numeric(c(1,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,5,5,5,5))
med_card<-as.numeric(c(1,1,NA,NA,NA,0,0,0,0,NA,NA,NA,1,1,1,1,1,1,NA,NA))
df<-data.frame(person_id,hhold_no, med_card)
期望输出。
df
person_id hhold_no med_card med_card_new
1 1 1 1 1
2 2 1 1 1
3 3 1 NA 1
4 4 1 NA 1
5 5 1 NA 1
6 6 2 0 0
7 7 2 0 0
8 8 2 0 0
9 9 2 0 0
10 10 3 NA 1
11 11 3 NA 1
12 12 3 NA 1
13 13 3 1 1
14 14 3 1 1
15 15 4 1 1
16 16 4 1 1
17 17 5 1 1
18 18 5 1 1
19 19 5 NA 1
20 20 5 NA 1