【发布时间】:2021-02-19 18:32:01
【问题描述】:
我对此进行了广泛的搜索,并且我能够找到随机化行顺序的所有示例,但没有找到行本身的数据。我正在尝试创建一个数据需要随机化的数据集。
我正在尝试将 df 变成 df2;
df:
df <- data.frame(a = c(1:5),
b = c(LETTERS[1:5]),
c = c(letters[1:5]))
a b c
1 1 A a
2 2 B b
3 3 C c
4 4 D d
5 5 E e
df2
a b c
1 2 D b
2 1 B d
3 4 E c
4 3 A a
5 5 C e
我认为没有很多解决方案的原因是人们需要保持他们的数据完整,但在这种情况下,我试图阻止数据集本身,因此条目不再正确。
目前我能做到的只有
df2 <- df[sample(1:nrow(df)), ]
a b c
3 3 C c
4 4 D d
2 2 B b
1 1 A a
5 5 E e
随机化行的顺序但保持数据完整。
【问题讨论】:
-
df2 <- df; df2[] <- lapply(df2, sample) -
谢谢!有用!试图找到一种方法将其标记为正确答案。你能解释一下df吗? df2[] 简要介绍?
-
df2 <- df将数据帧复制到一个新对象,这样原始对象就不会被覆盖;如果您不在乎,请跳过它。因为数据框是一个列列表,所以lapply(df2, sample)在每一列上调用sample()并在列表中返回结果。df2[] <-将该列表分配回df2,但由于[],它分配给对象的一个子集(恰好是这里的全部),因此它保留其数据框类而不是覆盖它使用像df2 <-这样的新对象。 -
非常感谢!不知道如何像换行一样使用分号。改进它的使用;如果我只想随机化某些列,我应该尝试什么?我尝试在 lapply 内的 df2 上进行子集化,但没有按预期工作。
-
它是列表子集,所以像列表一样对数据框进行子集,为列使用一组索引,例如
iris[1:4] <- lapply(iris[1:4], sample)。不过,请确保您分配给您正在迭代的相同列,否则事情会变得很奇怪。