按组拆分数据帧的最快方法,在 R 中随机播放单个向量

Fastest Way to Split Data Frame by Group, shuffle single vector in R

我熟悉 R 中的一些拆分-应用-组合函数,例如 ddply,但我不确定如何拆分数据框、修改每个子集中的单个变量,然后重新组合子集。我可以手动执行此操作,但肯定有更好的方法。

在我的例子中,我试图在一个组中打乱单个变量(但 none 其他变量)。这是一个排列分析,所以我做了很多次,因此想加快速度。

allS <- split(all, f=all$cp)
for(j in 1:length(allS)){
    allS[[j]]$party <- sample(x=allS[[j]]$party)
}
tmpAll <- rbind.fill(allS)

示例数据框:

all <- data.frame(cp=factor(1:5), party=rep(c("A","B","C","D"), 5))

感谢任何指导!

我们可以使用data.table。我们将 'data.frame' 转换为 'data.table' (setDT(all)),按 'cp'、sample 和 'party' 分组并赋值 (:=)该输出返回到 'party' 列。

library(data.table)
setDT(all)[, party:= sample(party) , by = cp]

dplyr 方式。

library(dplyr)
all %>% group_by(cp) %>% mutate(party=sample(party))