【问题标题】:Fill NA values (for factor valued columns) with values according to distribution of the factors? [closed]根据因子分布用值填充 NA 值(对于因子值列)? [关闭]
【发布时间】:2018-02-26 17:10:57
【问题描述】:

我有一个包含多个因子列的数据框 df,例如包含因子 a、b、c 的 A 列,包含因子 m、f 的 B 列等等。

这些列中的每一列都有 NA。

  1. 如何根据它们的 a、b、c 和 m、f 填充 NA 列中的分布(例如,如果我有 50% 的男性和 50% 女性(为简单起见)我将填写我的 NA 的 50% 作为男性,50% 作为女性)?

  2. 如果我有大约 550 个数据观察和 41 列?

    • 下一步将对其进行重新采样以扩大数据集并在数据集上应用 ML - 请告诉我哪个函数可以将此数据集扩大到 10000 个或更多观测值?

提前致谢!

【问题讨论】:

  • 我怀疑这是个好主意,但您可以使用 prob 的 sample 参数。
  • @RuiBarradas 为什么不呢?有什么建议吗?
  • 因为NA 值是数据的一部分,R 中有一些方法可以根据具体情况删除它们。例如,在某些函数中,您可以设置na.rm = TRUE 或na.omit 和na.exclude。但保留原始数据。

标签: r machine-learning


【解决方案1】:

你可以使用下面的代码(请看下面的几个cmets)(我创建了一个小数据框给你一个具体的例子)

A_ <- c(rep("a", 10), rep("b", 60), rep("c", 30), rep(NA, 200))
A <- data.frame(A_)
names(A) <- c("A")

b <- sample(c("a","b","c"), size = 200, prob = c(10,60,30)/100,replace = TRUE)
A[is.na(A)] <- b

您可以检查

table(A)

现在您应该小心更改 NA 值。首先我会检查你为什么有NA。也许信息不存在是有原因的。使用分布中的值更改 NA,您会自动假设缺失数据遵循相同的分布。真的是这样吗? 550 个观察值真的没有那么多关于分布的讨论。也许您需要简单地忽略带有 NA 的记录?

关于第二个问题,您不能简单地从现有数据中生成新数据。在某些情况下(例如,参见图像,您可以在其中倾斜、移动它们等等),您可以“增强”您的数据集。使用您描述的小数据集,我不会这样做。 这完全取决于您拥有的数据类型。但我的第一印象是,在你的情况下,有 41 个因子和许多 NA,你不能简单地增加你的数据。

可能更多地了解您的数据集可以帮助我们为您提供更准确的帮助。

【讨论】:

  • 我们有一个临床实验和 550 个观察结果。我需要了解和预测药物是否真的对患者有帮助。如果一个新的出现,基于特征和观察,一个人是否会受益并对药物有反应?
猜你喜欢
  • 2020-08-20
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多