【问题标题】:How to impute data depending on a class如何根据类估算数据
【发布时间】:2018-12-01 16:51:33
【问题描述】:

大家好,我正在寻找一种优雅的方式来在我的数据集中估算 NA:

Sex Age
M   20
M   21
F   30
M   NA
F   26
F   29
F   NA

我想为每种性别估算不同的年龄平均值。我假设女性和男性的年龄分布略有不同。不幸的是,如果不创建新列然后再次放入数据集中,我认为不可能做到这一点。即使我走这条路它也行不通,我认为我想多了这个问题:

    males <- train[train[, "Sex"]=="male", ]
    females <- train[train[, "Sex"]=="female", ] 

    mf <- mean(train$Age, na.rm = TRUE)  
    mm <- mean(train$Age, na.rm = TRUE)

    train[train$Age == NA & train$Sex == "male", "Age"] <- mf 

    Error in '[<-.data.frame`(`*tmp*`, males$Age == NA & males$Sex == "male",  
    : missing values are not allowed in subscripted assignments of data frames

请问有什么建议吗?

【问题讨论】:

  • 您必须使用is.na(train$Age) 来检查缺失值。
  • 谢谢,我已经知道了,但不是问题的线索。
  • @Tom - 你正在使用train$Age == NA - 试试is.na(train$Age),如user2974951答案所示
  • 对不起,我没有理解逻辑。谢谢!

标签: r


【解决方案1】:

要检查 R 中的值是否为 NA,您必须使用 is.na(something) 函数。直接比较something==NAsomething=="NA"会报错。

mm <- mean(train$Age[train$Sex=="male"], na.rm = TRUE)
mf <- mean(train$Age[train$Sex=="female"] , na.rm = TRUE)

train$Age[is.na(train$Age) & train$Sex=="male"] <- mm
train$Age[is.na(train$Age) & train$Sex=="female"] <- mf

【讨论】:

  • 请为您的回答提供一些背景信息。
【解决方案2】:

如果您想要更多合理的值而不仅仅是每个缺失值的平均值,您可以考虑使用包mice

df_old <- data.frame(Sex = c(rep("M", 500), rep("F", 500)),
                 Age = round(c(rnorm(500, 35, 2), rnorm(500, 25, 2))))

df_NA <- data.frame(Sex = sample(c("M", "F"), 10, rep = T),
                    Age = NA)

df_old %>% 
  group_by(Sex) %>%
  summarise(Mean = mean(Age))

以下是两种性别的方法:

# A tibble: 2 x 2
  Sex    Mean
  <fct> <dbl>
1 F      24.9
2 M      34.9

现在结合两个数据框并使用mice 估算值:

df <- rbind(df_old, df_NA)

library(mice)
df_imp <- complete(mice(df, m=5, maxit=50, meth='pmm', seed=500), 1)
cbind(tail(df, n = 10), tail(df_imp, n = 10))

我们使用预测均值匹配算法来估算缺失值。还有其他几种可用的算法 (?mice)。 最后一行显示了估算的值:

       Sex Age Sex Age
1001   M  NA   M  30
1002   F  NA   F  24
1003   M  NA   M  33
1004   M  NA   M  33
1005   F  NA   F  25
1006   M  NA   M  35
1007   M  NA   M  36
1008   M  NA   M  36
1009   M  NA   M  37
1010   F  NA   F  27

【讨论】:

  • 这是我在更广泛的背景下寻找的东西,将来对我真的很有帮助,谢谢!
  • 但是常规小鼠在第一步中的功能是区分它们是两个不同的组,还是先取整个种群,然后根据两个参数进行预测?它甚至有什么不同吗?
  • 太棒了!我真的很感激
猜你喜欢
  • 1970-01-01
  • 2020-09-30
  • 1970-01-01
  • 2018-12-27
  • 2018-09-26
  • 2019-04-19
  • 2022-11-17
  • 2015-08-12
  • 2018-02-15
相关资源
最近更新 更多