r - 通过索引在 R 中填充大量 NA 数据?

标签 r na missing-data

我根据三件事对价格数据进行了索引:

状态、日期和 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/

相关文章:

r - Blogdown 网站帖子 - 隐藏日期和/或帖子标题

用周围环境值的平均值替换缺失值

用 R 中的 NA 替换数据帧中的 -Inf

bash - 如何计算 bash 中 netcdf 文件中随时间维度求和的缺失值数量

git - git pull 后丢失文件?

r - 在 R 中的 rename() 函数内部使用外部变量

r - 如何在R中添加函数

r - R 如何进行精确的 wilcoxon 秩和检验?

r - 包含NA的因子列的唯一值=> “Hash table is full”错误

python - pandas fillna 不适用于数据集的子集