R dcast填写样本编号

时间:2017-02-22 01:46:24

标签: r data.table reshape2 dcast

我想知道在使用fill(库dcastreshape2)时,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)。

是否可以将该功能单独应用于每个缺失值,因此用不同的随机数填充缺失值?

提前致谢!

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