【发布时间】:2021-06-30 12:17:16
【问题描述】:
我想洗牌一列中的所有行,除非一行包含一个特定值,在这种情况下,该行不应包含在洗牌过程中(即包含指定值的所有行都保持原位)。
使用下面的 iris 示例,假设我们要打乱列 Species 的所有行,除了那些包含值 setosa 的 Species 行。我该怎么做?
谢谢!
library(dplyr)
set.seed(123)
my_df <- iris %>%
mutate(species2 = sample(Species), # shuffles whole column
# attempted conditional shuffle of non-setosa values (does not work!)
species3 = sample(nrow(Species != "setosa")))
【问题讨论】:
-
您可以将 setosa 和非 setosa 物种放在单独的表中,对第二个进行洗牌,然后将它们绑定在一起。
-
感谢您的建议。我确实考虑过这个想法,但在我需要工作的规模上感觉效率很低。下面的答案更适合工作流程。