R 根据第 1 列和第 2 列中的值随机排列第 3-6 列中的值

R Shuffle values in columns 3-6 based on values in columns 1 AND 2

我是 R 的新手,我真的在努力变得更好,但我已经被困在以下问题上一段时间了:

我有一个数据框,假设有 6 列和 20 行。我需要做的是根据第 1 列和第 2 列的值对每列的数据进行随机排序,但仅限于第 3-6 列。

我将尝试举一个例子来更清楚地说明:我正在处理两个说话者各自的两个量化成绩单。所以第 1 列是 Talk 的编号,第 2 列是演讲者的编号。所以现在我需要通过 Talk 和 Speaker 过滤我的数据,然后随机打乱所有其他列中的数据。我需要对所有会谈和所有发言者重复这一点。

有人知道如何解决这个问题吗?

我们可以试试

library(data.table)
setDT(df1)[, lapply(.SD, function(x) x[sample(seq_along(x))]), .(Talk, Speaker)]

或使用dplyr

library(dplyr)
df1 %>% 
   group_by(Talk, Speaker) %>% 
   mutate_each(funs(.[sample(row_number())]))

数据

set.seed(49)
df1 <- data.frame(Talk = rep(1:3, each = 3), Speaker = sample(1:3, 9,
 replace=TRUE), col3 = rnorm(9), col4 = rnorm(9), col5 = rnorm(9), col6 = rnorm(9))