【发布时间】:2020-09-24 05:11:51
【问题描述】:
我有一个数据集,其中有几个变量 - 长度、宽度等的测量值 - 和一个分组变量 - 行。我想以这样一种方式随机化数据,即行间方差保持不变,但变量之间的行协方差被破坏了。
以鸢尾花为例,在这里我可以通过物种的分组变量获得每个物种的值块以保持在一起,并根据每个特征单独随机分配新物种 - 正是我想要的 - 但它也将数据中的 NA。我怎样才能让这个减少,以便形状与原始数据相同?
library(data.table)
set.seed(21)
dtIris <- data.table(id = rep(1:9, times = 1), iris[c(1:3, 51:53, 101:103), ])
dtIris
dcast(
melt(dtIris, id.vars = c('id', 'Species'))[
melt(dtIris, id.vars = c('id', 'Species'))[,
.('Species' = unique(Species), 'new' = sample(unique(Species))), by = variable],
on = c('Species', 'variable')][, -c('Species')],
... ~ variable, value.vars = 'value')
这是将数据放入长格式,为每个性状采样物种的唯一值,将其合并回长格式数据,然后将其传播回宽格式。它正在将 NAs 留在新的 != Species 处。
id new Sepal.Length Sepal.Width Petal.Length Petal.Width
1: 1 setosa NA 3.5 1.4 NA
2: 1 virginica 5.1 NA NA 0.2
3: 2 setosa NA 3.0 1.4 NA
...
【问题讨论】:
标签: r data.table dcast