2017-09-18 60 views
-3

我有一个数据框df与多个因子列,说列A与因子a,b,c,列B与因子m,f等等。使用根据因素分布的值填充NA值(因子值列)?

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

  1. 我怎样才能填NA与A,B,C和M,根据它们在列(例如 分布,如果我有50层%的男性和50%女性 (为简单起见F)我将填写我的NA 50%为男性,50%为女性)?

  2. 如果我有大约550个观察数据和41个 列,这是一种很好的技术吗?

    • 下一步将重新采样它以使数据集更大并将ML应用于数据集 - 请告诉我哪个函数将该数据集放大到10000个观察值或更多?

在此先感谢!

+0

我怀疑这是个好主意,但你可以使用'sample'的参数'prob'。 –

+0

@RuiBarradas为什么不呢?任何建议? – Steves

+1

由于“NA”值是数据的一部分,“R”中有许多方法可以根据具体情况排除它们。例如,在一些函数中,你可以设置'na.rm = TRUE'或'na.omit'和'na.exclude'。但保留原始数据。 –

回答

0

你可以使用下面的代码(请参见下面的一对夫妇的评论)(我创建了一个小的数据帧给你一个具体的例子)

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,你不能简单地增加你的数据。

可能知道更多关于您的数据集可以帮助我们给您更精确的帮助。

+0

我们有一个临床实验和550个观察。我需要了解并预测药物是否对患者有帮助。如果有新病人出现,根据这些特征和观察结果,是否会有益于该药物并对其作出反应? – Steves