【问题标题】:How to impute means into specific observations in a column?如何将均值归入列中的特定观察值?
【发布时间】:2019-09-14 22:11:21
【问题描述】:

我目前有一个任务,其中包括一个数据表,其中包含有关在不同场合测量的动物物种的观察信息。在我的数据的“重量”列中,我应该用动物来自的物种的平均重量来替换缺失的值。因此,在没有记录动物体重的两种情况下,我希望物种“albigula”的平均重量为 148 来替换 NA,这样我就有了一个完整的数据集。然后我需要对另外 10 个左右的物种重复这个过程。

除了以下之外,我想不出办法:

    albigula <- filter(surveys_combined_year, surveys_combined_year$species == "albigula")
    albigula$weight %>% mean(na.rm= TRUE)

但是,这显然不起作用,因为我无法将平均值归入“surveys_combined_year$weight”中的特定位置。

很抱歉可能是超级初学者的问题,我已经搜索了我们在课堂上提供的所有资源,但我似乎仍然无法理解我错过了什么。

请帮帮我!

【问题讨论】:

  • 你可以使用类似albigula$weight[is.na(albigula$weight)] = mean(albigula$weight,na.rm)的东西。这将输入所有有NA的地方的平均值

标签: r na imputation


【解决方案1】:

我们可以做一个group_byreplace。按'species'分组,replace'weight'中的NAreplace_na)元素由'weight'的meanmean

library(dplyr)
library(tidyr)
out <- surveys_combined_year %>%
         group_by(species) %>%
         mutate(weight = replace_na(weight, mean(weight, na.rm = TRUE)))

编辑 - 将 replace 更改为 replace_na(来自 @BenBolker 的 cmets)

【讨论】:

  • 更加整洁:tidyr::replace_na(weight, mean(weight, na.rm=TRUE)) ?
  • @akrun 和 BenBolker 非常感谢您的综合帮助!这已经是救命稻草了,我没想到我可以使用变异!谢谢!!
猜你喜欢
  • 2021-03-28
  • 2021-04-27
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多