对组内的行进行随机排序

时间:2021-04-21 11:31:48

标签: r dataframe sorting data-wrangling

我有一个数据框 (df1),它在给定组中运行了多次。现在,我想在不改变数据帧的整体结构的情况下对给定组内的运行进行混洗。我的意思是,第 1 列(组)应该保持不变,但第二列(运行)的顺序应该在该组的行范围内进行调整。期望的结果在 df2 中给出。

df1 <- structure(list(Group = c("A", "A", "A", "B", "B", "B", "B", "B", 
"C", "C", "C", "C"), Run = c(1L, 2L, 3L, 1L, 2L, 3L, 4L, 5L, 
1L, 2L, 3L, 4L)), class = "data.frame", row.names = c(NA, -12L
))

df2 <- structure(list(Group = c("A", "A", "A", "B", "B", "B", "B", "B", 
"C", "C", "C", "C"), Run = c(1L, 3L, 2L, 2L, 1L, 3L, 4L, 5L, 
1L, 3L, 4L, 2L)), class = "data.frame", row.names = c(NA, -12L
))

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您可以使用 dplyr:您可以先使用 group_by 定义您的组,然后将 samplemutate 语句一起使用:

df1 %>%  group_by(Group) %>% mutate(Run=sample(Run))

答案 1 :(得分:1)

这是使用 ave + sample

的基本 R 选项
transform(
  df1,
  Run = ave(Run, Group, FUN = sample)
)