我正在对分成不同国家的2个数据集进行一些分析(两个数据集只有不同的数字相同),但有3个国家缺少数据。我正在使用aggregate()
函数来填充虚拟值,以便我可以在没有NAs弹出的情况下进行分析。但是,由于某些原因,将新值合并回原始数据时,该功能将不起作用。
但是,如果我清除我的工作区并再次运行它可能会起作用,但仅适用于1个或2个国家/地区,或2个数据集中的1个。当我不在任何时候更改代码时,我无法理解为什么它可以工作一次而不是另一次。任何帮助将不胜感激。
mil<-read.csv("C:/Data_millions.csv",header=TRUE)
per<-read.csv("C:/Data_percent.csv",header=TRUE)
##Fill in blanks for ZA
#Create dummy numbers for each category of age/age-gender
aggregate(data=mil,ZA~TypeOfPerson,mean,na.rm=TRUE)
#Merge output back into original data
ave_ZA<-ave(mil$ZA,mil$TypeOfPerson,FUN=function(x)mean(x,na.rm=TRUE))
mil$ZA<-ifelse(is.na(mil$ZA),ave_ZA,mil$ZA)
aggregate(data=per,ZA~TypeOfPerson,mean,na.rm=TRUE)
ave_ZA_per<-ave(per$ZA,per$TypeOfPerson,FUN=function(x)mean(x,na.rm=TRUE))
per$ZA<-ifelse(is.na(per$ZA),ave_ZA_per,per$ZA)
##Fill in blanks for BEWA
aggregate(data=mil,BEWA~TypeOfPerson,mean,na.rm=TRUE)
ave_BEWA<-ave(mil$BEWA,mil$TypeOfPerson,FUN=function(x)mean(x,na.rm=TRUE))
mil$BEWA<-ifelse(is.na(mil$BEWA),ave_BEWA,mil$BEWA)
aggregate(data=per,BEWA~TypeOfPerson,mean,na.rm=TRUE)
ave_BEWA_per<-ave(per$BEWA,per$TypeOfPerson,FUN=function(x)mean(x,na.rm=TRUE))
per$BEWA<-ifelse(is.na(per$BEWA),ave_ZA_per,per$BEWA)
##Fill in blanks for GR
aggregate(data=mil,GR~TypeOfPerson,mean,na.rm=TRUE)
ave_GR<-ave(mil$GR,mil$TypeOfPerson,FUN=function(x)mean(x,na.rm=TRUE))
mil$GR<-ifelse(is.na(mil$GR),ave_GR,mil$GR)
aggregate(data=per,GR~TypeOfPerson,mean,na.rm=TRUE)
ave_GR_per<-ave(per$GR,per$TypeOfPerson,FUN=function(x)mean(x,na.rm=TRUE))
per$GR<-ifelse(is.na(per$GR),ave_GR_per,per$GR)
更新:一些示例数据以及未使用的数据
这里还有NAs: https://www.dropbox.com/s/bd9c9mjttdehbrt/missing.jpg?dl=0
以下是我的数据的链接: https://www.dropbox.com/s/vsiq9nr6ic3odmv/Data_millions.csv?dl=0