2014-10-27 57 views
1

我在R中有一个大表,其中有一堆列都是NA。我想从另一个表替换为随机采样数每个NA细胞,像这样:用不同的随机替换R表中的所有NA条目

dataTable=read.csv("my-data.csv", header = TRUE, sep = ",", quote = "\"", 
        dec = ".", fill = TRUE, comment.char = "") 

randValues <-c(0,0.3,-0.3) 

dataTable[is.na(dataTable)] <- sample(randValues,1) 

的问题是,每个小区被与来自randTable同一随机选择的号码替换。我如何为每个单元格获得不同的编号?

+0

datatable [is.na(dataTable)] < - sample(randValues,sum(is.na(dataTable)))''作用吗? – Emer 2014-10-27 15:59:59

+1

@我有同样的想法,但添加了'replace = TRUE',所以你没有用完样本值。 – 2014-10-27 16:01:31

+0

这听起来像你正在做(类似于)缺少数据的插补,所以你可能想看看为此目的而编写的包。 – 2014-10-27 18:43:51

回答

2

尝试sample(randValues, sum(is.na(dataTable)),replace=TRUE)这保证您将获得尽可能多的独立样本,因为有NA值,并且允许每次随机选择相同的值。 (sum函数强制logical输出为数字1和0)

+0

接受的答案很好,谢谢。有没有一种简单的方法来偏向样本,比如说如果我希望75%的随机值是-0.3? – user1971455 2014-10-27 16:18:06

+0

是的,您可以通过'prob'参数添加一组权重,或者只写'randValues <-c(rep( - 。3,75),rep(0,12),rep(+。3,13) )' – 2014-10-27 16:57:25