使用“R”中的data.table对不同数据表中的键进行采样

时间:2014-02-14 09:53:44

标签: r data.table

我有以下代码。

DT <- data.table(s3ITR)
DTKey <- data.table(s3Key, key = "Age")
> DT
    Index Country Age Time Charity
 1:     1  France  30   40       1
 2:     2  France  40   40       0
 3:     3  France  40   50       0
 4:     4 Germany  40   40       1
 5:     5  France  60   40       1
 6:     6  France  40   40       1
 7:     7 Germany  30   40       0
 8:     8 Germany  30   40       1
 9:     9 Germany  30   40      NA
10:    10 Germany  30   40       1
> DTKey
   Index Country Age Time Charity
1:     1  France  30   40       0
2:     2 Germany  30   40       0
3:     3 Germany  30   40       1
4:     4 Germany  30   40       0
5:     5 Germany  30   40       1
6:     6 Germany  30   40       1

我想通过DTKey中的随机样本将DT归入DT中,这可能存储在名为impute的新列中。

我可以轻松地在DT中设置一个密钥,并使用下面的代码从DT本身进行采样

DT <- data.table(s3ITR, key = "Age")
DT[, Impute := sample(na.omit(Charity), length(Charity), replace = T), by = key(DT)] 
DT[!is.na(Charity), Impute := Charity]

这有点令人费解,但它有效,我得到了结果

    Index Country Age Time Charity Impute
 1:     1  France  30   40       1      1
 2:     2  France  40   40       0      0
 3:     3  France  40   50       0      0
 4:     4 Germany  40   40       1      1
 5:     5  France  60   40       1      1
 6:     6  France  40   40       1      1
 7:     7 Germany  30   40       0      0
 8:     8 Germany  30   40       1      1
 9:     9 Germany  30   40      NA      1
10:    10 Germany  30   40       1      1

NA被估算为1的概率是3/4。我想这个完全相同的东西,但来自DTkey的样本,其中概率为3/6。

有没有合并表格的简单方法呢?

1 个答案:

答案 0 :(得分:0)

您是否有特殊原因需要从DTKey进行采样?要达到“公平”的概率,您可以简单地使用:

sample(0:1,1,replace=T)

假设慈善机构分别为0或1。

更新:

好的,在这种情况下,您可以尝试以下方法:

DT[, Impute:= sample(DTKey[,Charity], length(DT[,Charity]), replace=T)]