我想知道在使用fill
(库dcast
或reshape2
)时,data.table
是否有办法使用随机数,每个个体缺失值。例如:
ID = c('AA', 'AA', 'BB', 'BB', 'CC', 'CC', 'CC', 'DD', 'DD')
Replica = c('H1','H3','H1','H2','H1','H2','H3','H2','H3')
Value = c(1.3, 2.5, 1.4, 3.7, 9.5, 7.4, 7.1, 1.8, 8.4)
example <- data.frame(ID=ID, Replica = Replica, Value = Value)
做一个简单的dcast
dfdc <- dcast(data=example, ID~Replica, value.var = 'Value', fill = sample(1:10, 1))
注意错过了一些值:
ID H1 H2 H3
1 AA 1.3 NA 2.5
2 BB 1.4 3.7 NA
3 CC 9.5 7.4 7.1
4 DD NA 1.8 8.4
我想用随机数填写每个缺失值,例如:
dfdc <- dcast(data=example, ID~Replica, value.var = 'Value', fill = sample(1:10, 1))
结果给出了:
ID H1 H2 H3
1 AA 1.3 2.0 2.5
2 BB 1.4 3.7 2.0
3 CC 9.5 7.4 7.1
4 DD 2.0 1.8 8.4
但是,所有缺失的值都被相同的随机数替换(在这种情况下为2)。
是否可以将该功能单独应用于每个缺失值,因此用不同的随机数填充缺失值?
提前致谢!
答案 0 :(得分:3)
如果您不关心警告,则可以执行fill = sample(10)
,并且将删除未使用的值。您仍会收到三个随机数。只需确保您确定样本高于预期的NA
值。
dcast(example, ID ~ Replica, fill = sample(10))
# ID H1 H2 H3
# 1 AA 1.3 4.0 2.5
# 2 BB 1.4 3.7 1.0
# 3 CC 9.5 7.4 7.1
# 4 DD 10.0 1.8 8.4
# Warning message:
# In ordered[is.na(ordered)] <- fill :
# number of items to replace is not a multiple of replacement length
当然,你也可以用suppressWarnings()
包裹它。
suppressWarnings(dcast(example, ID ~ Replica, fill = sample(10)))
# ID H1 H2 H3
# 1 AA 1.3 6.0 2.5
# 2 BB 1.4 3.7 5.0
# 3 CC 9.5 7.4 7.1
# 4 DD 9.0 1.8 8.4
答案 1 :(得分:3)
以下是使用void MainWindow::mtoast(int msgtime,int level, QString msg)
{
QMessageBox *mbox = new QMessageBox;
mbox->setStandardButtons(0);
mbox->setText(msg);
switch(level){
case 0:
mbox->setIcon(QMessageBox::NoIcon);
break;
case 1:
mbox->setIcon(QMessageBox::Question);
break;
case 2:
mbox->setIcon(QMessageBox::Information);
break;
case 3:
mbox->setIcon(QMessageBox::Warning);
break;
case 4:
mbox->setIcon(QMessageBox::Critical);
break;
}
mbox->setWindowFlags ( Qt::CustomizeWindowHint | Qt::WindowTitleHint);
mbox->show();
QTimer::singleShot(msgtime, mbox, SLOT(hide()));
}
tidyverse