我有以下代码。
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。
有没有合并表格的简单方法呢?
答案 0 :(得分:0)
您是否有特殊原因需要从DTKey进行采样?要达到“公平”的概率,您可以简单地使用:
sample(0:1,1,replace=T)
假设慈善机构分别为0或1。
更新:
好的,在这种情况下,您可以尝试以下方法:
DT[, Impute:= sample(DTKey[,Charity], length(DT[,Charity]), replace=T)]