我有一个如下所示的数据框:
set.seed(300) df <- data.frame(site = sort(rep(paste0("site", 1:5), 5)), value = sample(c(1:5, NA), replace = T, 25)) df site value 1 site1 NA 2 site1 5 3 site1 5 4 site1 5 5 site1 5 6 site2 1 7 site2 5 8 site2 3 9 site2 3 10 site2 NA 11 site3 NA 12 site3 2 13 site3 5 14 site3 4 15 site3 4 16 site4 NA 17 site4 NA 18 site4 4 19 site4 4 20 site4 4 21 site5 NA 22 site5 3 23 site5 3 24 site5 1 25 site5 1
如您所见,列中有几个缺失值value
.我需要value
用列表的平均值替换列中的缺失值.因此,如果value
测量值存在缺失值site1
,我需要将均值归结value
为site1
.但是,数据帧不断被添加到R并导入到R中,下次导入数据帧时,它可能会增加到50行的长度,并且可能会有更多的缺失值value
.我需要创建一个函数,它将自动检测哪个站点的缺失值value
被测量,并为该特定站点计算缺失值.有人可以帮帮我吗?
利用impute()
从包Hmisc
和ddply
从包plyr
:
require(plyr) require(Hmisc) df2 <- ddply(df, "site", mutate, imputed.value = impute(value, mean))