我根据三件事对价格数据进行了索引:
状态、日期和 UPC(即产品代码)。
我有一堆不适用的价格。
我正在尝试以下列方式填充 NA:对于给定的缺失价格和索引 (S,D,UPC),填充具有相同 S 和 UPC 的所有数据点的平均价格。即,取日期的平均值。
必须有一种非常简单的方法来做到这一点,因为这非常简单。我一直在使用 for 循环,但我现在意识到这是非常低效的,我想使用一个函数,例如 plyr 或 dplyr 中的一个,它会在尽可能少的步骤中完成所有操作。
upc=c(1153801013,1153801013,1153801013,1153801013,1153801013,1153801013,2105900750,2105900750,2105900750,2105900750,2105900750,2173300001,2173300001,2173300001,2173300001)
date=c(200601,200602,200603,200604,200601,200602,200601,200602,200603,200601,200602,200603,200604,200605,200606)
price=c(26,28,NA,NA,23,24,85,84,NA,81,78,24,19,98,NA)
state=c(1,1,1,1,2,2,1,1,2,2,2,1,1,1,1)
# This is what I have:
data <- data.frame(upc,date,state,price)
# This is what I want:
price=c(26,28,27,27,23,24,85,84,79.5,81,78,24,19,98,47)
data2 <- data.frame(upc,date,state,price)
有什么建议吗?谢谢。
最佳答案
使用 ave
用多个分组变量,然后替换NA
值与手段:
with(data,
ave(price, list(upc,state), FUN=function(x) replace(x,is.na(x),mean(x,na.rm=TRUE) ) )
)
# [1] 26.0 28.0 27.0 27.0 23.0 24.0 85.0 84.0 79.5 81.0 78.0 24.0 19.0 98.0 47.0
关于r - 通过索引在 R 中填充大量 NA 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35353947/