gpt4 book ai didi

将NA值替换为组值

转载 作者:行者123 更新时间:2023-12-04 13:13:32 25 4
gpt4 key购买 nike

我有一个如下的df,其中有5个人的20个人。家庭中的某些人缺少有关是否拥有医疗卡的数据。我想给这些人和他们家庭中的其他人相同的值(而不是NA值,即为0或1的实际二进制值)。

我尝试了以下代码,这是朝正确方向迈出的一步-但并非100%正确,因为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
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

最佳答案

尝试ave。它将功能应用于组。查看?ave以获得详细信息,例如:

df$med_card_new <- ave(df$med_card, df$hhold_no, FUN=function(x)unique(x[!is.na(x)]))

# 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

请注意,这仅在家庭中并非所有值都为 NA并且两者之间的值不应相同(例如,人1 == 1,人2 == 0)时才有效。

关于将NA值替换为组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23583739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com